Wicket でJSONを返す。

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);