我正在使用 Jersey 并希望输出以下 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"
}
]
如果必须,我可以用 {"feeds": ... } 包围该 JSON,但最好将其设为可选。我想从存储在通过 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;
}
目前,我有一个名为 CalendarResource 的 Jersey 资源,它手动输出带有日历提要信息的 JSON:
@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();
}
}
但我不确定如何实现自动化。我刚开始使用 Jersey,不清楚如何使用它返回 JSON。听起来它有一种内置的方法,但看起来我需要向我的 POJO 添加注释。另外,我读到其他人说我需要使用杰克逊。我一直在谷歌搜索,似乎找不到从泽西岛资源返回 JSON 的好而简单的示例。有人知道吗?或者您能告诉我如何使用 Jackson 或 Jersey 为上述示例创建 JSON 吗?