私はジャージーを使用しており、リストされたフィールドのみを含む次の JSON を出力したいと考えています。
[
{
"name": "Holidays",
"value": "http://www.google.com/calendar/feeds/usa__en%40holiday.calendar.google.com/public/basic"
},
{
"name": "Personal",
"value": "http://www.google.com/calendar/feeds/myprivatefeed/basic"
}
]
必要に応じて、その JSON を {"feeds": ... } で囲むことができますが、これはオプションにするのが最善です。この情報を、Hibernate 経由で取得される Member POJO に格納されている CalendarFeeds のリストから取得したいと考えています。簡略化された POJO は次のとおりです。
public class Member {
private String username;
private String password;
private Set<CalendarFeed> calendarFeeds = new HashSet<CalendarFeed>();
}
public class CalendarFeed {
public enum FeedType { GCAL, EVENT };
private Member owner;
private String name;
private String value;
private FeedType type;
}
現在、カレンダー フィード情報を含む JSON を手動で出力する CalendarResource というジャージー リソースがあります。
@Path("/calendars")
public class CalendarResource {
@Inject("memberService")
private MemberService memberService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public String getCalendars() {
// Get currently logged in member
Member member = memberService.getCurrentMember();
StringBuilder out = new StringBuilder("[");
boolean first = true;
for (CalendarFeed feed : member.getPerson().getCalendarFeeds()) {
if (!first) {
out.append(",");
}
out.append("{\"");
out.append(feed.getName());
out.append("\":\"");
out.append(feed.getValue());
out.append("\"}");
first = false;
}
out.append("]");
return out.toString();
}
}
しかし、これを自動化する方法がわかりません。私はジャージーを使い始めたばかりで、それを使用して JSON を返す方法が明確ではありません。これを行う方法が組み込まれているように思えますが、POJO に注釈を追加する必要があるようです。また、ジャクソンを使用する必要があると他の人が言っているのを読みました。私はグーグルで検索してきましたが、Jersey リソースから JSON を返す良い単純な例を見つけることができないようです。誰でも知っていますか?または、Jackson または Jersey を使用して上記の例の JSON を作成する方法を教えていただけますか?