1

サーバーには複雑なオブジェクトがありますが、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 に置き換える方法はありますか? 私は多くの複雑なオブジェクトを持っているので、オブジェクト 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ます。これにより、Jackson は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": 5json が生成されます (Userオブジェクトのシリアル化された値の前後に二重引用符は追加されません)。

于 2012-06-14T10:02:18.867 に答える