将 pojo 转换为 json 时出错(cxf JAX-RS:数据绑定)
Error convert pojo to json(cxf JAX-RS : Data Bindings)
我有下一个pojo:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "domain")
@Entity
class Domain {
@ManyToOne
private Domain parent;
@OneToMany //add column definitions as needed
private List<Domain> subdomains;
}
和 rs 服务:
@GET
@Path("/domains/{id}")
@Produces("application/json")
public Bus getDomains(@PathParam("uuid") String uuid){
return domainsService.getByUuid(uuid);
}
当我尝试访问资源时,出现循环并且
java.lang.WhosebugError
at com.sun.xml.txw2.StartTag.addNamespaceDecl(StartTag.java:158)
at com.sun.xml.txw2.StartTag.getPrefix(StartTag.java:257)
at com.sun.xml.txw2.DatatypeWriter.print(DatatypeWriter.java:114)
at com.sun.xml.txw2.DatatypeWriter.print(DatatypeWriter.java:109)
at com.sun.xml.txw2.Document.writeValue(Document.java:165)
at com.sun.xml.txw2.StartTag.addAttribute(StartTag.java:135)
at com.sun.xml.txw2.ContainerElement._attribute(ContainerElement.java:318)
at com.sun.xml.txw2.ContainerElement._attribute(ContainerElement.java:313)
如何正确转换包含对自身的引用的 类?
您正在进入一个无限循环,因为当您的子域尝试呈现其父域时,父域随后呈现其所有子域,其中每个子域将再次尝试呈现父域,依此类推,直到您 运行 内存不足。因此,要解决您的问题,请在 Domain
class
中的 parent
属性 上添加注释 @JsonIgnore
我有下一个pojo:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "domain")
@Entity
class Domain {
@ManyToOne
private Domain parent;
@OneToMany //add column definitions as needed
private List<Domain> subdomains;
}
和 rs 服务:
@GET
@Path("/domains/{id}")
@Produces("application/json")
public Bus getDomains(@PathParam("uuid") String uuid){
return domainsService.getByUuid(uuid);
}
当我尝试访问资源时,出现循环并且
java.lang.WhosebugError
at com.sun.xml.txw2.StartTag.addNamespaceDecl(StartTag.java:158)
at com.sun.xml.txw2.StartTag.getPrefix(StartTag.java:257)
at com.sun.xml.txw2.DatatypeWriter.print(DatatypeWriter.java:114)
at com.sun.xml.txw2.DatatypeWriter.print(DatatypeWriter.java:109)
at com.sun.xml.txw2.Document.writeValue(Document.java:165)
at com.sun.xml.txw2.StartTag.addAttribute(StartTag.java:135)
at com.sun.xml.txw2.ContainerElement._attribute(ContainerElement.java:318)
at com.sun.xml.txw2.ContainerElement._attribute(ContainerElement.java:313)
如何正确转换包含对自身的引用的 类?
您正在进入一个无限循环,因为当您的子域尝试呈现其父域时,父域随后呈现其所有子域,其中每个子域将再次尝试呈现父域,依此类推,直到您 运行 内存不足。因此,要解决您的问题,请在 Domain
class
parent
属性 上添加注释 @JsonIgnore