2012-04-19 8 views
1

私のサーバーには複雑なオブジェクトがありますが、私のWebクライアントではこれらのオブジェクトを簡単に表現したいと思います。 私は、例えば自分のIDを持つオブジェクトを交換したいと思います:Json:実際のオブジェクトの代わりにオブジェクト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を生成するとき、私は 内部イベントクラスとユーザークラスは、ユーザーIDを持つユーザーを置き換えるために、とにかくあり得るのだろうか? 私は多くの複雑なオブジェクトを持っているので、Userオブジェクトだけのアノテーションのようなエレガントな方法を探しています。これはオブジェクトIDだけを返します。

もちろん私は別の方法が必要です。 IDを取得してオブジェクトに変換します。

私はジャクソンを使用しています

どのようなアイデアですか?

10倍 ノーム

答えて

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; 
    } 
} 
0

は、ここでそれを達成するためにどのように私の考えです。 userプロパティで@JsonRawValue(true)注釈を使用できます。これにより、Jacksonは既にシリアル化されたものとしてuserオブジェクトを扱います。そしてUserクラスの.toString()メソッドをオーバーライドして、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のオブジェクトセライズされた値の周りに追加されません)。

関連する問題