Wicket で、JSONデータを返す方法は、WebPage の getRequestCycle() から、
void org.apache.wicket.request.cycle.RequestCycle.scheduleRequestHandlerAfterCurrent(IRequestHandler handler)
メソッドを呼び出して IRequestHandler には、ResourceStreamRequestHandler で、応答する JSON文字列のストリームを渡す。
JSON の生成に、Google GSON を使ってサンプルを書くと以下のとおり。
import java.util.HashMap;
import java.util.Map;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.request.handler.resource.ResourceStreamRequestHandler;
import org.apache.wicket.util.resource.StringResourceStream;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
/**
* ExampleResponseJson
*/
public class ExampleJsonPage extends WebPage{
public ExampleJsonPage(){
Map<String,String> map = new HashMap<String,String>();
map.put("a", "1");
Gson gson = new GsonBuilder().create();
getRequestCycle().scheduleRequestHandlerAfterCurrent(
new ResourceStreamRequestHandler(new StringResourceStream(gson.toJson(map)))
);
}
@Override
protected void configureResponse(WebResponse response){
response.setContentType("application/json");
super.configureResponse(response);
}
}
================
通常作成する、ExampleJsonPage.html もこの場合は作成しない。
WebApplication クラスの init で、URIマウントをしておけば、リクエストを送る方も楽になる。
mountPage("/json/test", ExampleJsonPage.class);