使用 Jersey 将 pojo 解析为 JSON



我正在尝试将对象转换为 JSON 格式,但它不起作用(我收到一个奇怪的堆栈溢出异常(。它从对象到XML都能完美地工作。我有一个简单的实体类 User 和另一个具有多对多关系的类。

@Entity
@XmlRootElement
public class User extends Person {
@Column(length = 60)
private String email;
@Column(name = "PSEUDO", length = 50)
protected String pseudo;

@ManyToMany(fetch = FetchType.LAZY ,targetEntity = Group.class)
@OrderBy("group_name ASC")
protected List<ItGroup> groups = new LinkedList<ItGroup>();
...
getters
}

相关类

@Entity
@Table(name = "groups")
public class Group implements ItGroup, Serializable {
...
@XmlTransient
@ManyToMany(fetch = FetchType.LAZY,mappedBy = "groups",targetEntity = User.class)
@OrderBy("email ASC")
private List<ItUser> users = new LinkedList<ItUser>();
...
}

我将@XmlTransient注释放在我想忽略的 getter 上。

这是我的休息服务中的一种方法,它从用户的昵称返回用户

@GET
@Path("{nickname}")
@Produces({"application/json"})
// @Produces({"application/xml"})
public ItUser getUserFromPseudo(@PathParam("nickname") String pseudo){
ItUser user = this.daoUser.getUserFromPseudo(pseudo);
return user;
}

所以它适用于@Produces({"application/xml"}(而不是@Produces({"application/json"}(

我正在使用 Glassfish 5,模块以这种方式包含在我的应用程序的父 POM 中,分为不同的模块。事实是,我什至不知道我使用的是哪种球衣实现......我读到moxy是最好的,它可以阅读jaxb注释。

<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
<scope>provided</scope>
</dependency>

我该如何解决这个问题?

也许你的"奇怪的堆栈溢出异常"是由杰克逊的无限递归引起的,就像这篇文章一样。所以@JsonIgnore@JsonManagedReference@JsonBackReference可能是您的选择。

  • http://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion
  • JsonManagedReference vs JsonBackReference

最新更新