У меня есть проект, который использует Jersey 1.7, Guice 3.0 и содержит несколько аннотированных классов JAXB, которые сериализуются через ресурсы в XML и JSON. Я хотел бы сконфигурировать вывод JSON, используя ContextResolver
, как предложено в нескольких вопросах здесь о SO, а также в Руководстве пользователя по Джерси . Это включает в себя создание JSONJAXBContext
, например:
public class JaxbResolver implements ContextResolver<JAXBContext> {
private final JAXBContext context;
public JaxbResolver() throws Exception {
this.ctx = new JSONJAXBContext(
JSONConfiguration.
natural().
humanReadableFormatting(true).
build(),
Resource1.class, Resource2.class);
}
/* ... */
}
Моя проблема в том, что некоторые из моих классов ресурсов имеют зависимости, которые должны вводиться Guice, например:
public class DisplayConfigResource {
private final ConfigRunner cr;
@com.google.inject.Inject
public DisplayConfigResource(ConfigRunner cr) {
this.cr = cr;
}
/* ... */
}
Если я удаляю свой JaxbResolver
из игры, все работает нормально, за исключением того, что я не имею никакого контроля над сгенерированным JSON (и по умолчанию это очень странно, например, удаление []
s из одноэлементных коллекций, .. .). Так что, кажется, здравый смысл подключать ContextResolver
, как мой, к Джерси, чтобы я мог настроить JSON на что-то, что мне нравится. Но
- классу
JSONJAXBContext
действительно нравится иметь конструкторы без аргументов в ресурсах, в то время как
- моим ресурсам действительно нравится вставлять свои зависимости в свои конструкторы.
Итак, мой вопрос: как разрешить эту ситуацию, и чтобы Джерси, Гис и JSON хорошо играли вместе?