【问题标题】:Error convert pojo to json(cxf JAX-RS : Data Bindings)将 pojo 转换为 json 时出错(cxf JAX-RS:数据绑定)
【发布时间】:2021-11-22 01:24:08
【问题描述】:

我有下一个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.StackOverflowError
    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$1$5.print(DatatypeWriter.java:114)
    at com.sun.xml.txw2.DatatypeWriter$1$5.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)

如何正确转换包含对其自身的引用的类?

【问题讨论】:

    标签: java jax-rs cxf cxfrs


    【解决方案1】:

    您正在进入一个无限循环,因为当您的子域尝试渲染其父域时,父域会渲染其所有子域,其中每个子域将尝试再次渲染父域,依此类推,直到内存不足。因此,要解决您的问题,请在 Domain 类中的 parent 属性上添加注释 @JsonIgnore

    【讨论】:

    • thx,迈克尔,我得到了正确的 json,但我仍然得到同样的错误 wnen want to get wadl cxf
    • 我认为这与 块的构造有关
    • 不知道wadl,好久没用了。但很可能,这与那里的原因相似 - 所以寻找注释以忽略那里的字段
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多