gpt4 book ai didi

java - Jackson 序列化期间出现异常

转载 作者:行者123 更新时间:2023-12-01 15:02:22 24 4
gpt4 key购买 nike

我遇到过这个问题,这个问题有点接近 this issue ,但是当我完成所有步骤后,我仍然遇到这样的异常:

org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]->com.myPackage.SomeEntity["mainEntity"]->com.myPackage.MainEntity["subentity1"]->com.myPackage.Subentity1_$$_javassist_8["handler"])

这是我的实体的代码:

@JsonAutoDetect
public class MainEntity {

private Subentity1 subentity1;

private Subentity2 subentity2;

@JsonProperty
public Subentity1 getSubentity1() {
return subentity1;
}

public void setSubentity1(Subentity1 subentity1) {
this.subentity1 = subentity1;
}

@JsonProperty
public Subentity2 getSubentity2() {
return subentity2;
}

public void setSubentity2(Subentity2 subentity2) {
this.subentity2 = subentity2;
}
}



@Entity
@Table(name = "subentity1")
@JsonAutoDetect
public class Subentity1 {

@Id
@Column(name = "subentity1_id")
@GeneratedValue
private Long id;

@Column(name = "name", length = 100)
private String name;

@JsonIgnore
@OneToMany(mappedBy = "subentity1")
private List<Subentity2> subentities2;

@JsonProperty
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@JsonProperty
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
//here I didin't add @JsonProperty, cause it leads to cycling during serialization
public List<Subentity2> getSubentity2s() {
return subentity2s;
}

public void setSubentity2s(List<Subentity2> subentity2s) {
this.subentity2s = subentity2s;
}

}

@Entity
@Table(name = "subentity2")
@JsonAutoDetect
public class Subentity2 {
@Id
@Column(name = "subentity2_id")
@GeneratedValue
private Long id;

@Column(name = "name", length = 50)
private String name;

@ManyToOne
@JoinColumn(name = "subentity1_id")
private Subentity1 subentity1;

@JsonProperty
public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@JsonProperty
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@JsonProperty
public Subentity1 getSubentity1() {
return subentity1;
}

public void setSubentity1(Subentity1 subentity1) {
this.subentity1 = subentity1;
}

这是我的转换方法的代码:

 private String toJSON(Object model) {
ObjectMapper mapper = new ObjectMapper();
String result = "";
try {
result = mapper.writeValueAsString(model);
} catch (JsonGenerationException e) {
LOG.error(e.getMessage(), e);
} catch (JsonMappingException e) {
LOG.error(e.getMessage(), e);
} catch (IOException e) {
LOG.error(e.getMessage(), e);
}
return result;
}

我将非常感谢任何帮助、建议或代码:)

更新

alsp,我忘记从我的 Controller 添加一段代码:

String result = "";
List<SomeEntity> entities = someEntityService.getAll();
Hibernate.initialize(entities);
for (SomeEntity someEntity : entities) {
Hibernate.initialize(someEntity.mainEntity());
Hibernate.initialize(someEntity.mainEntity().subentity1());
Hibernate.initialize(someEntity.mainEntity().subentity2());
}
result = this.toJSON(entities);

我不能忽略任何字段,因为我需要它们

最佳答案

基本上,您的一些字段被包装到惰性 hibernate 代理中。在序列化对象之前调用 Hibernate.initialize(model) ,它将加载您的惰性集合和引用。

但我不会混合数据库和 View 模型,这是一个不好的做法。为您的 Restful 模型创建一组类,并在序列化之前将数据库实体转换为它们。

关于java - Jackson 序列化期间出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13457006/

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