在我的服务器上,我有复杂的对象,但在我的Web客户端中,我希望得到这些对象的简单表示。 我想用他们的id替换对象,例如:
@JsonAutoDetect
public class Event{
private Long id;
private String name;
private User user;
@JsonProperty("event_id")
public Long getId() {
return event_id;
}
public String getName() {
return name;
}
public String getUser() {
return user;
}
....setters
}
生成Json时,我会在里面获得Event类和用户类 无论如何用用户ID替换用户? 由于我有许多复杂的对象,我正在寻找一种优雅的方式,就像User对象上的注释一样,它只返回对象id。
当然,我需要相反的方式。获取id并将其转换为对象。
BTW:我正在使用杰克逊任何想法?
10倍 诺姆
答案 0 :(得分:0)
您可以公开Id的属性并忽略子实体属性,如下所示:
class Event {
private User user;
public Long getUserId() {
return user.getId();
}
public void setUserId(Long userId) {
this.user = retrieveUserById(userId); // or any other code
}
@JsonIgnore
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
答案 1 :(得分:0)
这是我的想法如何实现它。您可以在@JsonRawValue(true)
媒体资源上使用user
注释。这将使杰克逊将user
对象视为已经序列化的东西。然后只需覆盖.toString()
类的User
方法,使其以字符串形式返回id。
所以在你的Event
课程中:
public class Event {
...
@JsonRawValue(true)
private User user;
...
}
在你的User
课程中:
public class User {
...
private Integer id;
...
@Override
public String toString() {
return id.toString();
}
...
}
这将导致例如你的json中"user": 5
(在User
对象serizlized值附近不会添加双引号。)