8

クラス DataType のシリアル化中、dbOptions は無視されますが、dataType はその値とともに出力されます。

これらのプロパティを無視する必要があるのは、シリアル化中のみであり、逆シリアル化中は無視する必要があることに注意してください。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "dataType")
@JsonSubTypes(value = {
    @JsonSubTypes.Type(value = DefaultType.class, name = "Default"),
    @JsonSubTypes.Type(value = NumberRangeType.class, name = "NumberRange"),

})
public abstract class DataType {

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
protected String dataType;

@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
protected String dbOptions;

public String getDataType() {
    return dataType;
}

public void setDataType(String dataType) {
    this.dataType = dataType;
}

public String getDbOptions() {
    return dbOptions;
}

public void setDbOptions(String dbOptions) {
    this.dbOptions = dbOptions;
}


abstract
public void compute() throws ParseException;

}

サンプル出力は次のとおりです。

"options":{"dataType":"NumberRange","id":"1","min":0,"max":30}

dataType を出力に出力したくない

4

1 に答える 1

9

この予期しない動作はバグのようです ( https://github.com/FasterXML/jackson-databind/issues/935を参照)。したがって、この問題を回避する必要があります。解決策の 1 つがここで説明されています http://www.davismol.net/2015/03/21/jackson-using-jsonignore-and-jsonproperty-annotations-to-exclude-a-property-only-from-json-deserialization / .

以下は、 @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) アノテーションの意図された動作を模倣するように適合された後者のリンクの例です。

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.Serializable;


public class User implements Serializable {

  @JsonIgnore
  private String password;

  @JsonIgnore
  public String getPassword() {
    return password;
  }

  @JsonProperty
  public void setPassword(String password) {
    this.password = password;
  }
}
于 2016-06-14T23:22:01.430 に答える