私は同じものを探していました。
Jackson docsによると@JsonIgnore
、プロパティ、ゲッター、またはセッターに@JsonProperty
注釈を設定できます。これは、設定時にこのプロパティが確実に表示されるようにする注釈をセッターに与えない限り、完全なプロパティを非表示にします。残念ながら、それは逆には機能しません。応答でプロパティを表示したかったのですが、リクエストには含めませんでした。
ユースケースは、たとえば自動生成された ID です。私はユーザーにそれを設定したり、見たりしたくありませんが、彼はそれを読むかもしれません。
実際に属性自体を非表示にしてから@JsonAnyGetter
メソッドを追加することで、これを実現できます。この方法では、データを任意の形式に変換できます。また、単一の名前、識別子、またはその他の形式のみを表示する複雑な属性クラスを表すのにも役立ちます。後者を行うためのより良い方法がありますが、ユース ケースが複雑すぎない場合は、これで十分です。
例として(これがあまりにも手の込んだ場合は申し訳ありません):
ユーザー:
public class User {
private String uid;
private String customerId;
private String taxSsnId;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getCustomerId() {
return extCustomerId;
}
public void setCustomerId(String extCustomerId) {
this.extCustomerId = extCustomerId;
}
public String getTaxSsnId() {
return taxSsnId;
}
public void setTaxSsnId(String taxSsnId) {
this.taxSsnId = taxSsnId;
}
@JsonIgnore
public void getId(){
if (getUid() != null){
return getUid();
}
if (getCustomerId() != null ){
return getCustomerId();
}
return null;
}
}
設定:
public class Setting {
@JsonIgnore
private int id;
private String key;
private String value;
@JsonIgnore
private User lastUpdatedBy;
@JsonIgnore
private Date lastUpdatedAt;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public User getLastUpdatedBy() {
return lastUpdatedBy;
}
public void setLastUpdatedBy(User lastUpdatedBy) {
this.lastUpdatedBy = lastUpdatedBy;
}
public Date getLastUpdatedAt() {
return lastUpdatedAt;
}
public void setLastUpdatedAt(Date lastUpdatedAt) {
this.lastUpdatedAt = lastUpdatedAt;
}
@JsonAnyGetter
private Map<String, String> other() {
Map<String, String> map = new LinkedHashMap<String, String>();
map.put( "id", this.getId());
map.put( "lastUpdatedBy", this.getLastUpdatedBy().getId());
SimpleDateFormat format = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss z");
map.put( "lastUpdatedAt", format.format(this.getLastUpdatedAt()) );
return map;
}
}
このRequest
スキーマを生成します (デシリアライゼーション ビュー):
{
"key": "string",
"value": "string"
}
およびこのResponse
スキーマ (シリアル化されたビュー):
{
"key": "string",
"value": "string",
"id": "12345",
"lastUpdatedBy": "String",
"lastUpdatedAt": "String"
}