WicketでJSONデータを返却する(JSONIC編)
追記:
コメントいただきまして、バージョン1.2.0で以下の問題点
の両方に対応していました。ステキすぎる!
mavenの指定
JSONICはMavenリポジトリが公開されていないので、まずはローカルリポジトリに登録する
mvn install:install-file -Dfile=jsonic-1.1.2.jar -DgroupId=net.arnx -DartifactId=jsonic -Dversion=1.1.2 -Dpackaging=jar -DgeneratePom=true
あるいは、Maven2でテキトウに社内リポジトリを作る方法 - tanamonの日記に従ってテキトウに社内リポジトリに登録します。
登録したらpom.xmlに追記します。
<dependency> <groupId>net.arnx</groupId> <artifactId>jsonic</artifactId> <version>1.1.2</version> </dependency>
JsonicPage.java
package jp.tanamon.wicket; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.arnx.jsonic.JSON; import net.arnx.jsonic.JSONHint; import org.apache.commons.lang.time.DateUtils; import org.apache.wicket.IRequestTarget; import org.apache.wicket.RequestCycle; import org.apache.wicket.markup.html.WebPage; public class JsonicPage extends WebPage { public JsonicPage() { getRequestCycle().setRequestTarget(new IRequestTarget() { public void detach(RequestCycle requestCycle) { // nothing to do here } public void respond(RequestCycle requestCycle) { requestCycle.getResponse().setContentType("application/json; charset=utf-8"); List<JsonData> list = new ArrayList<JsonData>(); list.add(new JsonData("All Day Event", new Date(), null)); list.add(new JsonData("Long Event", DateUtils.setDays(new Date(), 2), DateUtils.setDays(new Date(), 10))); // POJO to JSON-String requestCycle.getResponse().write(JSON.encode(list, true)); } }); } public class JsonData { private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss+09:00"; public String title; @JSONHint(format = ISO8601_DATE_FORMAT) public Date start; @JSONHint(format = ISO8601_DATE_FORMAT) public Date end; public JsonData(String title, Date start, Date end) { this.title = title; this.start = start; this.end = end; } } }
出力内容
[ { "end": null, "start": "2009-12-08T11:06:18+09:00", "title": "All Day Event" }, { "end": "2009-12-10T11:06:18+09:00", "start": "2009-12-02T11:06:18+09:00", "title": "Long Event" } ]