Я использую Jersey для реализации JAX-RS REST-style сервисов вместе с Jackson 2.0.2 для сопоставления JSON. Одна из этих служб REST возвращает List
(назовем его indexA
), где EntityA
содержит другой List
, тогда как другой сервис просто возвращает List
(назовем его indexB
):
@Entity
@JsonAutoDetect
public class EntityA {
@Id
private String id;
@OneToMany
private List b;
...
}
@Entity
@JsonAutoDetect
@JsonFilter("bFilter")
public class EntityB {
@Id
private String id;
private String some;
private String other;
private String attributes;
...
}
@Path("/a")
public class AResource {
@GET
@Path("/")
public List indexA() {
...
}
}
@Path("/b")
public class BResource {
@GET
@Path("/")
public List indexB() {
...
}
}
Чего я хотел бы добиться, так это применить фильтр Джексона к indexA
таким образом, чтобы не все атрибуты дочерних элементов EntityB
были сериализованы. OTOH, indexB
должен возвращать EntityB
в полном объеме.
Мне известно о существовании ContextResolver
, который я уже использую для других целей. К сожалению, для ContextResolver
невозможно различить оба вызова службы, поскольку Class
, предоставленный ContextResolver.getContext(Class)
, представляет собой ArrayList
в обоих случаях (и из-за стирания типа я не могу понять параметры универсального типа).
Существуют ли какие-либо хуки, которые лучше подходят для настройки ObjectMapper
/ FilterProvider
в зависимости от типа отображаемой сущности?
Я мог бы использовать подход, предложенный в Как вернуть частичный ответ JSON с помощью Java?: ручное сопоставление с строкой
, но это убивает всю красоту декларативной аннотации- основанный на подходе, поэтому я хотел бы избежать этого.