こんにちは、相互に埋め込まれた UI オブジェクトはほとんどありません。例 #1:
class CarUI {
public UserUI user;
public UserUI agent;
....
public UserUI getUser() {
return user;
}
public UserUI getAgent() {
return agent;
}
}
class UserUI {
@JsonView({Views.Public.class,Views.Private.class})
public String name;
@JsonView({Views.Private.class})
public String phone;
...
}
ご覧のとおり、UserUI をパブリックとしてシリアル化すると、名前のみが公開されますが、プライベートの場合はすべてのフィールドが公開されます。
これが私の質問です: オブジェクト CarUI をシリアル化するときに、「ユーザー」の名前のみを公開し、「エージェント」の名前と電話の両方を公開したいと考えています。つまり、getUser() のゲッターで JsonView を Views.Public.class に変更し、getAgent() のゲッターで Views.Private.class に変更したいということです。
この新しいJsonViewを使用して、返されたオブジェクトのすべての階層をシリアル化するために、ゲッターでJsonViewを上書きする方法はありますか?
編集 済み 以下に示すように、JsonView 継承を使用して私の例 #1 を解決できます。より一般的なものはどうですか。例 2 は次のとおりです。
class CarUI {
public UserUI user;
public UserUI agent;
....
public UserUI getUser() {
return user;
}
public UserUI getAgent() {
return agent;
}
}
class UserUI {
@JsonView({Views.Public.class,Views.Private.class})
public String name;
@JsonView({Views.Private.class})
public String phone;
@JsonView({Views.Public.class})
public String avatarUrl;
...
}
この例では、エージェントには名前と電話、ユーザーには名前とアバターの URL を表示します。