1

在我的服务器上,我有复杂的对象,但在我的网络客户端中,我想获得这些对象的简单表示。我想用他们的 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 替换用户?由于我有许多复杂的对象,我正在寻找一种优雅的方式,比如可能只返回对象 ID 的 User 对象上的注释。

当然,我需要相反的方式。获取 id 并将其转换为对象。

顺便说一句:我正在使用杰克逊

有任何想法吗?

10x 诺姆

4

2 回答 2

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;
    }
}
于 2012-04-20T15:00:57.907 回答
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();
    }
    ...
}

这将导致例如"user": 5在您的 json 中(不会在User对象序列化值周围添加双引号)。

于 2012-06-14T10:02:18.867 回答