Java Stakover流错误,Jackson应用于JPA实体以生成JSON
我有一个Java Stakover流错误,Jackson应用于JPA实体以生成JSON,java,json,jpa-2.0,one-to-many,yasson,Java,Json,Jpa 2.0,One To Many,Yasson,我有一个JPA代码与OneToMany关系。客户有一个要签出的项目列表。但是,代码会继续生成StackOverflowerError 有一次,我通过应用@JsonIgnore解决了这个问题,同时从客户实体获取列表。但即使这样似乎也不再有效 在Customer类中: @OneToMany(mappedBy = "customer", orphanRemoval = true) @JsonIgnore private List<Item> items; @ManyToOne(fetch
JPA
代码与OneToMany
关系。客户
有一个要签出的项目列表。但是,代码会继续生成StackOverflowerError
有一次,我通过应用@JsonIgnore
解决了这个问题,同时从客户实体获取列表。但即使这样似乎也不再有效
在Customer
类中:
@OneToMany(mappedBy = "customer", orphanRemoval = true)
@JsonIgnore
private List<Item> items;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CUSTOMER_ID", nullable = false)
private Customer customer;
@Path("customers")
public class CustomerRest {
@Inject
NewSessionBean newSessionBean;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Customer> getAllCustomers() {
return newSessionBean.getCustomers();
}
}
和CustomerRest
class:
@OneToMany(mappedBy = "customer", orphanRemoval = true)
@JsonIgnore
private List<Item> items;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "CUSTOMER_ID", nullable = false)
private Customer customer;
@Path("customers")
public class CustomerRest {
@Inject
NewSessionBean newSessionBean;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Customer> getAllCustomers() {
return newSessionBean.getCustomers();
}
}
我希望有一个格式良好的JSON消息,但没有迹象表明这一点。我得到的只是浏览器上的java.lang.StackOverflowerError
,服务器日志生成以下内容:
Generating incomplete JSON|#]
java.lang.StackOverflowError
java.lang.StackOverflowError at org.eclipse.yasson.internal.serializer.DefaultSerializers.findByCondition(DefaultSerializers.java:130)
看起来您没有使用project。在这种情况下,您应该使用@JsonbTransient
注释。见:
默认情况下,JSONB
忽略具有非公共访问权限的属性。全部的
公共属性-公共字段或带有
公共getter被序列化为JSON
文本
可以使用@JsonbTransient
注释排除属性。
忽略用@JsonbTransient
注释注释的类属性
通过JSON绑定
引擎。行为因位置不同而不同
@JsonbTransient
已放置批注
另见:
您需要查看:@JsonManagedReference
和@JsonBackReference
注释。阅读:。另见:,谢谢。但是,我确实尝试了JsonManagedReference和JsonBackReference,但没有成功。您没有使用Jackson将对象序列化为JSON。因此,使用Jackson注释无法修复任何问题。在org.eclipse.yasson.internal.serializer.DefaultSerializers.findByCondition(DefaultSerializers.java:130)上阅读stacktrace:。你用的是yasson,不是Jackson。很抱歉反应太晚。是的,这个把戏确实管用。非常感谢!!