Android+SAStruts+JSONICで実装とか
動くようになったので、メモ。
準備
まず、SAStrutsでJSONICを動かすための設定などはこちらを見てね。
≫WebサービスAPI (JSONIC 1.3)
web.xmlの該当箇所は、こんな感じで設定。
こうすれば、/app/json/entity.json みたいなURLで動いてくれる。
JSON-WebService json-ws net.arnx.jsonic.web.WebServiceServlet config { container: 'net.arnx.jsonic.web.S2Container' debug: true mappings: { '/json/{class}/{id}.{ext}': 'com.hoge.service.${class}Service' '/json/{class}/{method}.{ext}': 'com.hoge.service.${class}Service' '/json/{class}.{ext}': 'com.hoge.service.${class}Service' } } 3
扱うエンティティクラスがEntityとする。
Entity.java
public class Entity { public long id; public String name; public String mail; }
Create
Android側の実装。
String url = "http://hoge.com/app/json/entity.json"; HttpPost post = new HttpPost(url); Listparams = new ArrayList (); params.add(new BasicNameValuePair("name", "1"); params.add(new BasicNameValuePair("mail", "hoge@example.com"); post.setEntity(new UrlEncodedFormEntity(params)); HttpResponse res = httpClient.execute(post); HttpEntity entity = res.getEntity(); int status = res.getStatusLine().getStatusCode(); // 結果を確認
SAStruts側の実装。
EntityService.javaに実装。
public void create(Mapparams) { Entity e = new Eneity(); e.name = params.get("name"); e.mail = params.get("mail"); insert(e); ResponseUtil.write("{success:true}", "application/json"); }
Read
Android側の実装。
String url = "http://hoge.com/app/json/entity.json"; HttpGet get = new HttpGet(url); HttpResponse res = httpClient.execute(get); HttpEntity entity = res.getEntity(); String json = EntityUtils.toString(entity); JSONObject root = new JSONObject(json); JSONArray a = root.getJSONArray("entities"); Listlist = new ArrayList (); for (int i = 0; i < a.length(); i++) { JSONObject o = a.getJSONObject(i); String name = o.getString("name"); String mail = o.getString("mail"); Entity e = new Entity(); e.name = name; e.mail = mail; list.add(e); }
SAStruts側の実装。
EntityService.javaに実装。
public Mapfind(Map params) { List list = select().getResultList(); Object o = list.toArray(); Map m = new HashMap (); m.put("entities", o); return m; }
Update
Android側の実装。
// 既存のEntity eを更新 String url = "http://hoge.com/app/json/entity.json"; JSONObject j = new JSONObject(); j.put("id", e.id); j.put("name", e.name); j.put("mail", e.mail); HttpPut put = new HttpPut(url); put.setEntity(new StringEntity(j.toString())); HttpResponse res = httpClient.execute(put); int status = res.getStatusLine().getStatusCode(); // 結果を確認
SAStruts側の実装。
EntityService.javaに実装。
@Override public int update(Entity e) { int r = super.update(e); ResponseUtil.write("{success:true}", "application/json"); return r; }
Delete
Android側の実装。
// Entity e を削除 String url = "http://hoge.com/app/json/entity.json?id=" + e.id; HttpDelete delete = new HttpDelete(url); delete.setHeader("Content-Type", "application/json"); HttpResponse res = httpClient.execute(delete); int status = res.getStatusLine().getStatusCode(); // 結果を確認 SC_NO_CONTENT が返ってくる
SAStruts側の実装。
EntityService.javaに実装。
@Override public int delete(Entity e) { int r = super.delete(e); ResponseUtil.write("{success:true}", "application/json"); return r; }