Я использую Джерси и хочу произвести следующий 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 {"подача":...}, но имеющий это быть дополнительным было бы лучшим. Я хочу вытянуть эту информацию из списка CalendarFeeds, которые хранятся в участнике POJO, который получен через, в спящем режиме. Вот упрощенные POJOs:
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 с календарем подают информацию:
@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. Это кажется, что имеет способ сделать, это встроило, но похоже, что я должен добавить аннотации к своему POJOs. Кроме того, я считал других, говорящих, что я должен использовать Jackson. Я гуглил и, может казаться, не определяю местоположение хорошего и простого примера возврата JSON от ресурса Джерси. Кто-либо знает о ком-либо? Или можно ли показать мне, как использовать Jackson или Джерси для создания JSON для для вышеупомянутого примера?
Я выяснил, как это сделать с помощью Jackson 1.4. Я не использую Джерси-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, я могу настроить, какие поля получают выход для разных ситуаций.
Надеюсь, это поможет кому-то еще!