gpt4 book ai didi

JsonIgnore 和 JsonBackReference 被忽略

转载 作者:行者123 更新时间:2023-12-04 19:42:27 24 4
gpt4 key购买 nike

我正在使用 spring 4.0.1、hibernate 4.3.5、jackson 1.9.2 和 STS IDE我正在创建一个以 JSON 格式返回数据的 RESTful 网络服务当我使用 Hibernate 代码生成器时,它会为源生成由 @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") 注释的关联实体的 getter 和 setter和 @ManyToOne(fetch = FetchType.LAZY) 供引用这会在序列化期间导致无限递归。我尝试使用 Jackson 的 @JsonIgnore 和 @JsonBackReference 注释来解决这个问题,但似乎它们被完全忽略了,无限递归仍在发生。

Caused by: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)

这是我的实体类用户类

    //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;
}

}

关于将 jackson 注册到我的应用程序,我使用了 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 注释被忽略了吗?

任何帮助将不胜感激...

最佳答案

使用

import com.fasterxml.jackson.annotation.JsonBackReference;

代替

import org.codehaus.jackson.annotate.JsonBackReference;

关于JsonIgnore 和 JsonBackReference 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com