【问题标题】:Java Netbeans Restfull service gives me "infinite JSON"Java Netbeans Restful 服务给了我“无限的 JSON”
【发布时间】:2023-03-19 02:16:01
【问题描述】:

我刚刚开始使用 Netbeans 提供的 Restfull Web 服务。

我创建了两个实体。第一个是Player,第二个是VehicleDetail。两者都有ManyToMany关系:

玩家:

@ManyToMany(mappedBy = "players", fetch = FetchType.LAZY)
private List<VehicleDetail> vehicleDetails;

车辆详情

@ManyToMany(fetch = FetchType.LAZY)
private List<Player> players;

我已经创建了 JSP 页面,您可以在其中创建新的 Players 和 VehicleDetails。我为我的实体添加了 Restfull Web 服务。他们会以 JSON 形式向我提供有关实体的信息。

当我通过我的 JSP 页面添加新的 Players 和 VehicleDetails 然后我通过 GET HTTP 方法测试 Restfull 服务时,它显示了正确的 JSON。

然后我将 VehicleDetail 添加到我的 Players 列表和 Player 到 VehicleDetails 列表并更新了它们:

Player player = db.getPlayer(playerId);
VehicleDetail detail = db.getVehicleDetail(detailId);

player.getVehicleDetails().add(detail);
detail.getPlayers().add(player);

db.updateObject(player);
db.updateObject(detail);

db.updateObject(Object o) 的代码是:

@Override
public void updateObject(Object o) {
    em.merge(o);
    em.flush();
}

现在,当我尝试查看我的播放器时。我创建 HTTP GET 方法以将 Player 视为 JSON。它向我展示了“无限”JSON。它告诉我它得到了 VehicleDetail 得到了这个 Player 得到了这个 VehicleDetail 得到了这个 Player 等等。它给了我例外;

java.lang.NoClassDefFoundError: org/codehaus/jackson/map/JsonMappingException$Reference

问题:我需要做什么? FETCHTYPE.LAZY 不起作用。

【问题讨论】:

    标签: java json jsp rest netbeans


    【解决方案1】:

    您应该将@JsonIgnore 注释添加到多对多关系方之一。

       @ManyToMany(mappedBy = "players", fetch = FetchType.LAZY)
       @org.codehaus.jackson.annotate.JsonIgnore
       private List<VehicleDetail> vehicleDetails;  
    

       @ManyToMany(fetch = FetchType.LAZY)
       @org.codehaus.jackson.annotate.JsonIgnore
       private List<Player> players;
    

    【讨论】:

    • 我的项目没有那种库。我有 Glassfish 3.1.2.2。所以我需要下载这个库??
    • @Mr.D 如果您有maven proj,那么您应该将其添加为依赖项。您也可以尝试添加@javax.xml.bind.annotation.XmlTransient 注释而不是
    • 我有 XmlTransient 注释,不起作用。我的项目也不是 Maven。我可以只添加 *.jar 文件吗?
    • @Mr.D 是的,你应该在编译阶段添加jackson库
    • 我已将 jackson-annotations-2.4- jar 文件添加到我的项目中。然后将@com.fasterxml.jackson.annotation.JsonIgnore 添加到我的 VehicleDetail 类中。什么都不做,它抛出异常并说存在无限递归和 StackOverflowError。
    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2012-08-01
    相关资源
    最近更新 更多