{以下のプログラムは、クライアント側のプログラムです。Userクラスに自動的にマッピングしてくれます。
"name":"ochi",
"age":10,
"adress":
{"name":"Osaka"}
}
JsonpRequestBuilder jb = new JsonpRequestBuilder();
jb.requestObject(
"http://XXXXX.XXX.XXXX.json",
new AsyncCallback<JsArray>() {
public void onFailure(Throwable caught) {
GWT.log("failure", caught);
}
public void onSuccess(JsArray<User> result) {
StringBuilder sb = new StringBuilder();
Window.alert("Success");
for (int i = 0; i < result.length(); i++) {
sb.append(result.get(i).getName());
}
resultArea.setValue(sb.toString());
}
});
ここで、注意しなければならないのは、クラスの宣言方法です。下記のように、JSNI形式でなければなりません。 import com.google.gwt.core.client.* ;
import java.util.* ;
final public class User extends JavaScriptObject {
protected User(){
}
public native java.lang.Long getId()/*-{
return this['id'];
}-*/;
public native Address getAddress()/*-{
return this['address'];
}-*/;
public native java.lang.String getName()/*-{
return this['name'];
}-*/;
final static public class Address extends JavaScriptObject {
protected Address(){
}
public native java.lang.String getName()/*-{
return this['name'];
}-*/;
}
}
このようなクラスを記述するのが手間ですが、実は作成を支援してくれるサイトがあります。JSONの雛形データをいれるとこのフォーマットに変換してくれるとても素敵なサイトです。(こういう世のためになるサイトを作りたいですね)
(追記:2010/10/22)
***.gwt.xml ファイルには
<inherits name='com.google.gwt.jsonp.Jsonp' />の記述が必要です。