У меня есть некоторые методы ресурса jersey, установленные с аннотацией @JsonView, чтобы фильтровать поля, возвращенные в ответе. Я бы хотел, чтобы в некоторых случаях можно было переопределить набор JsonView в аннотации другим или иногда полностью отключить его. (некоторый запросParam будет использоваться для определения того, какой вид должен быть установлен для рендеринга или если он должен быть отключен). Любые идеи?Как переопределить методы @JsonView в ресурсах jersey
ответ
Вы можете настроить запись объекта Jackson внутри фильтра джерси на основе аннотации метода ресурса, используя the Jackson 2.3 ObjectWriterModifier/ObjectReaderModifier feature.
Обратитесь к the Jersey documentation как определить фильтры и перехватчики. This question может быть полезно для Jersey 1.x.
Ниже приведен пример регистрации локального экземпляра потока объекта ObjectWriterModifier, который изменяет класс представления для поставщика JAX-RS Jackson. Я не тестировал код в отношении реализации JAX-RS, но я считаю, что он должен работать (дайте мне знать, если это не так).
public class JacksonObjectWriterModifier {
private static class JsonViewOverrider extends ObjectWriterModifier {
private final Class<?> view;
private JsonViewOverrider(Class<?> view) {
this.view = view;
}
@Override
public ObjectWriter modify(EndpointConfigBase<?> endpoint, MultivaluedMap<String, Object> responseHeaders,
Object valueToWrite, ObjectWriter w, JsonGenerator g) throws IOException {
return w.withView(view);
}
}
private static class View1 {
}
private static class View2 {
}
public static class Bean {
@JsonView(View1.class)
public final String field1;
@JsonView(View2.class)
public final String field2;
public Bean(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
}
public static void main(String[] args) throws IOException {
Bean b = new Bean("a", "b");
JacksonJsonProvider provider = new JacksonJsonProvider();
provider.setDefaultView(View1.class);
// commenting the following line falls back to the View1
ObjectWriterInjector.set(new JsonViewOverrider(View2.class));
provider.writeTo(b, Bean.class, null, null, MediaType.APPLICATION_JSON_TYPE, null, System.out);
}
Я еще не пробовал. Приоритеты изменились, но я обещаю дать вам отзыв, как только я получу шанс сделать это. –
@AlexKubity Я обновил свой вопрос - добавлены ссылки на фильтры Джерси. –
- 1. Как переопределить методы класса
- 2. Две близких методы в примерочной с-ресурсах
- 3. Как проверить методы контроллера JERSEY с UriInfo
- 4. Как переопределить методы вложенных типов?
- 5. Как переопределить методы компонента ExtJS?
- 6. Как переопределить додзё combox.js методы
- 7. Как переопределить методы списка Java?
- 8. Как переопределить методы крюка SAPUI5
- 9. Как переопределить методы класса Perl?
- 10. Как повторно использовать методы REST в разных ресурсах?
- 11. Хотите переопределить метод willDisplayCell в Swift. Как переопределить методы класса
- 12. Переопределить методы плагина jQuery
- 13. Как переопределить встроенный редактор исключений в Jersey 2.23?
- 14. Spree - Переопределить методы checkout_controller
- 15. Переопределить методы строки java
- 16. Как использовать JSONView в Chrome
- 17. Как переопределить переменные экземпляра/методы в основном?
- 18. Как переопределить методы в признаке Scala?
- 19. Как переопределить методы onload в ClojureScript?
- 20. Как переопределить методы CRUD в tastypie?
- 21. Как переопределить методы SignalR в mvc 5
- 22. Как переопределить методы библиотеки в Java?
- 23. Как обновить jsonView элемента?
- 24. Cakephp JsonView
- 25. JsonView не работает
- 26. Переопределить и изменить методы протоколов
- 27. Переопределить методы POST, PATCH & DELETE
- 28. Какие методы Scala Map переопределить
- 29. Изменить методы React.js класса - переопределить?
- 30. Как переопределить все методы, соответствующие регулярное выражение
Цель состоит в том, чтобы установить jsonview по умолчанию для данного ответа службы отдыха и, если необходимо, переопределить его. –