Я работаю с RestEasy, Jboss 7 и EJB 3.1. Я создаю веб-службу RESTful, которая возвращает данные в формате JSON.
Проблема в том, что у меня есть отношение @ManyToOne
к одному из моих объектов, что вызывает бесконечную рекурсию во время сериализации. Я попытался использовать аннотации Джексона @JsonIgnore
и @JsonBackReference
, чтобы решить проблему, но кажется, что они полностью игнорируются, и бесконечная рекурсия все еще происходит.
Это мой класс пользователя:
class User {
private String userId;
private Role role;
@Id
@Column(name = "\"UserId\"", unique = true, nullable = false, length = 30)
public String getUserId() {
return this.UserId;
}
public void setUserId(String UserId) {
this.UserId = UserId;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "\"RoleId\"", nullable = false)
//I have tried @JsonIgnore without @JsonBackReference
@JsonIgnore
//I have tried @JsonBackReference without @JsonIgnore
//Also I have tried @JsonBackReference and @JsonIgnore together
@JsonBackReference("role-User")
public Role getRole() {
return this.role;
}
}
Это часть моего класса ролей:
@JsonManagedReference("role-User")
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "role")
public Set<User> getUsers() {
return this.users;
}
Я где-то читал, что я должен зарегистрировать Джексона в своем приложении, чтобы иметь возможность использовать обычную аннотацию Jaxb, поэтому я создал класс
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class JacksonContextResolver implements ContextResolver<ObjectMapper> {
public JacksonContextResolver() {
ObjectMapper mapper = new ObjectMapper();
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector();
mapper.getDeserializationConfig().setAnnotationIntrospector(
introspector);
mapper.getSerializationConfig().setAnnotationIntrospector(introspector);
}
public ObjectMapper getContext(Class<?> objectType) {
return objectMapper;
}
}
Проблема с вышеизложенным в том, что JaxbAnnotationIntrospector()
устарел.
Пожалуйста:
- Вы хоть представляете, почему аннотации Джексона игнорируются?
- Как я могу использовать обычные XML-аннотации JAXB вместо аннотаций Джексона?
- Что я могу использовать вместо
JaxbAnnotationIntrospector()
?
Ответ на любой из этих вопросов приветствуется, спасибо.
Обновление:
На данный момент я исключил resteasy-jackson-provider
, используя jboss-deployment-structure.xml
, и вместо этого использую Jettison. Я все еще хочу знать, как я могу использовать Джексона!