java – 如何从泽西资源生成JSON?
发布时间:2020-12-14 16:40:30 所属栏目:Java 来源:网络整理
导读:我正在使用泽西,并希望仅输出列出的以下 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/feed
我正在使用泽西,并希望仅输出列出的以下
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" } ] 如果我必须,我可以用{“feed”:…}包围该JSON,但是这是可选的将是最好的.我想从存储在通过Hibernate检索的成员POJO中的CalendarFeed列表中提取这些信息.以下是简化的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的泽西资源,手动输出JSON与日历Feed信息: @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.另外,我读了别人说我需要使用杰克逊.我一直在谷歌搜索,似乎找不到从泽西资源返回JSON的一个很好的简单例子.有人知道吗或者你可以告诉我如何使用Jackson或Jersey为上面的例子创建JSON? 解决方法
我想出了如何使用Jackson 1.4做到这一点.我不使用jersey-json,因为它是基于旧版本的Jackson,我需要1.4版本来使用JsonViews.
这是注释的pojo: public class CalendarFeed { public enum FeedType { GCAL,EVENT }; @JsonIgnore private Member owner; private String name; private String value; @JsonIgnore private FeedType type; } 这是泽西资源: @Path("/calendar") public class CalendarResource { @Inject("memberService") private MemberService memberService; @Inject private ObjectMapper mapper; @GET @Produces(MediaType.APPLICATION_JSON) public String getCalendars() { Member member = memberService.getCurrentMember(); try { return mapper.writeValueAsString(member.getCalendarFeeds()); } catch (JsonGenerationException e) { } catch (JsonMappingException e) { } catch (IOException e) { } return "{}"; } } 这是我的春豆 <!-- Jackson JSON ObjectMapper --> <bean id="objectMapper" class="org.codehaus.jackson.map.ObjectMapper"/> 输出正是我需要的.并使用JsonViews,我可以自定义哪些字段可以为不同的情况输出. 希望这会帮助别人! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |