Использование привязки данных Джексона позволяет задавать необязательные поля при десериализации строки и другие поля. - PullRequest
0 голосов
/ 03 апреля 2019

Я использую 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

отсутствуют в json, Exception будет брошено.

Я хотел бы бросить Exception, если key-one или key-two отсутствует, и пусть key-three будет необязательным.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вот как я определил свой класс, чтобы указать, какие поля являются обязательными, а какие нет.

@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) {
        ..
    }
}
0 голосов
/ 03 апреля 2019

Используя комментарий Dhruv Kapatel, вы должны использовать конструктор по умолчанию (без аргументов), и ваш требуемый @JsonProperty должен иметь required = true.

...