gpt4 book ai didi

java - 具有 JPA 实体的 JAX-RS JSON 序列化循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:00 26 4
gpt4 key购买 nike

我正在使用 Netbeans 7.4 在 Glassfish 4.0 上开发典型的 Java EE 7 应用程序。我有一组具有各种关系的 JPA 实体。由于这可能是一个众所周知的问题,当我尝试使用 JAX-RS 服务公开一个与另一个实体具有双向关系的实体时,我遇到了一个问题(很可能是由序列化循环引起的)。

我已经搜索了很多解决方案。显然,解决这个问题的最简单方法是使用 Jackson 提供程序而不是 Jersey 内置的提供程序。然而,这对我来说并不成功。我可能在中间做错了什么,任何提示都将不胜感激。

第一个实体:

@Entity
public class User implements Serializable {

@Id
private long id;

...

@OneToMany(
mappedBy = "owner",
cascade = CascadeType.ALL
)
private List<Playlist> playlists;

...

}

第二个实体:

@Entity
public class Playlist {

@Id
@GeneratedValue
private long id;

...

@NotNull
@ManyToOne
private User owner;

...

}

JAX-RS 服务:

@Path("/user")
@Stateless
public class UserResource {

@Inject
private UserService userService;

@GET
@Path("/{username}")
@Produces(MediaType.APPLICATION_JSON)
public Response getUser(@PathParam("username") String username) {
return Response.ok(userService.getUser(username)).build();
}

}

我已经下载了最新的 Jackson 二进制文件 (jackson-core-2.3.1.jar) 并将其包含在我的类路径中,当我部署我的应用程序时,我实际上可以在 Glassfish 服务器日志中看到与 jackson 相关的内容。如果返回的用户实体没有任何关联的播放列表,则一切正常。但是,对于指定用户的一个或多个播放列表,会返回 HTTP 500 错误,并且 Glassfish 服务器日志中不会显示任何内容。

在此先感谢您的帮助。

更新

经过多次来回。我仍然无法让 jackson 工作。我搬到了 Wildfly (Jboss 8),我不能让它使用提供的 jackson 版本而不是内置版本。无论在类路径中添加哪个版本的 jackson(有或没有 Maven),错误始终指示 org.codehaus.jackson.*。

最佳答案

修改您的 Playlist 实体类:

@Entity
@JsonIgnoreProperties({"owner"})
public class Playlist {

当 Jackson 试图序列化具有 Playlist 和 User 等等的 User 时,你的 Jackson 正在运行......

关于java - 具有 JPA 实体的 JAX-RS JSON 序列化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21345153/

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