я использую весной 4.0.1, спящий режим 4.3.5, 1.9.2 Джексона и STS IDE Я создаю RESTful веб-сервис, который возвращает данные в формате JSON , когда я использую Hibernate генератор кода генерирует геттеры и сеттер связанных объектов, аннотированных @OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
для источника и @ManyToOne(fetch = FetchType.LAZY)
для ссылки , что вызывает бесконечную рекурсию при сериализации. Я попытался использовать аннотации @JsonIgnore и @JsonBackReference от Jackson, чтобы исправить эту проблему, но кажется, что они полностью игнорируются и бесконечная рекурсия все еще происходит.JsonIgnore и JsonBackReference игнорируются
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)
Это мой объектные классы User.class
//i get that suggestion from some sites
@JsonIgnoreProperties({ "hibernateLazyInitializer", "handler" })
@Entity
@Table(name = "user", catalog = "someSchema")
public class User implements java.io.Serializable {
private String name;
private String password;
private String username;
private Set<Telephone> telephones = new HashSet<Telephone>(0);
@JsonManagedReference
@OneToMany(fetch = FetchType.LAZY, mappedBy = "user")
public Set<Telephone> getTelephones() {
return this.telephones;
}
public void setTelephones(Set<Telephone> telephones) {
this.telephones = telephones;
}
}
Telephone.class
@Entity
@Table(name = "telephone", catalog = "someSchema")
public class Telephone implements java.io.Serializable {
private User user;
private String telephone;
@ManyToOne(fetch = FetchType.LAZY)
//tried @JsonIgnore only and both
@JsonIgnore
//tried @JsonBackReference only and both
@JsonBackReference
@JoinColumn(name = "user_id", nullable = false)
public User getUser() {
return this.user;
}
@JsonIgnore
@JsonBackReference
public void setUser(User user) {
this.user = user;
}
}
относительно регистрации Джексону моего приложения, я использовал XML конфигурации
<mvc:annotation-driven>
<mvc:message-converters>
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="objectMapper">
<bean
class="web.jsonConverters.HibernateAwareObjectMapper" />
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
и класс сопоставления
public class HibernateAwareObjectMapper extends ObjectMapper {
public HibernateAwareObjectMapper() {
Hibernate4Module hm = new Hibernate4Module();
registerModule(hm);
}
}
У вас есть идеи, почему аннотации Jackson игнорируются?
любая помощь будет оценена ...
возможно дубликат [@JsonIgnore и @JsonBackReference игнорируются] (http://stackoverflow.com/questions/16881382/jsonignore-and-jsonbackreference- игнорируются) –
yup ..но ответов недостаточно, может ли кто-нибудь дать лучший ответ? –
Вы должны - * непременно * - предоставить более подробную информацию о вашем текущем случае (код, какая ошибка вы получаете, что вы пробовали до сих пор). Вы можете ссылаться на этот вопрос, если ни один из трех ответов не помог (это часть того, что вы пробовали до сих пор). –