使用杰克逊数据绑定,在反序列化字符串时需要使用特定字段,而其他则需要

时间:2019-04-03 18:39:19

标签: java json jackson deserialization jackson-databind

我正在使用jackson-databind-2.9.8.jar

这是模型的Java类表示形式,它将包含反序列化的JSON String

@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomClass {
    @JsonProperty("key-one")
    private String keyOne;
    @JsonProperty("key-two")
    private String keyTwo;
    @JsonProperty("key-three")
    private String keyThree;

    @JsonCreator
    public CustomClass(
        @JsonProperty("key-one") String keyOne,
        @JsonProperty("key-two") String keyTwo,
        @JsonProperty("key-three") String keyThree) {
        this.keyOne = keyOne;
        this.keyTwo = keyTwo;
        this.keyThree = keyThree;
    }
}

下面的代码然后解析json,其中包含JSON中的String结构。

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES, true);

CustomClass customClass;
try {
    customClass = mapper.readValue(json, CustomClass.class);
} catch (IOException e) {
    System.out.println("Parse error");
    e.printStacktrace();
}

问题在于,如果有任何属性:

  • key-one
  • key-two
  • key-three
{p}中缺少

,将抛出json

我只想在缺少ExceptionException的情况下抛出key-one,而让key-two是可选的。

我该如何实现?

2 个答案:

答案 0 :(得分:0)

使用Dhruv Kapatel注释,您应该使用默认(无arg)构造函数,并且所需的@JsonProperty应该具有required = true

答案 1 :(得分:0)

这是我定义类的方式,以指定哪些字段是必需的,哪些字段不是必需的:

@JsonIgnoreProperties(ignoreUnknown = true)
public class MyClass {
    @JsonProperty("value-one")
    private String valueOne;
    @JsonProperty("value-two")
    private String valueTwo;
    @JsonProperty("value-three")
    private String valueThree;

    public MyClass(
        @JsonProperty(value = "value-one", required = true) String valueOne,
        @JsonProperty(value = "value-two", required = true) String valueTwo,
        @JsonProperty(value = "value-three", required = false) String valueThree) {
        ..
    }
}