Джексон + FAIL_ON_MISSING_CREATOR_PROPERTIES + Ломбок - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь использовать флаг Джексона на objectMapper

objectMapper.enable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES);

Это должно привести к сбою десериализации объекта, если аргумент конструктора не задан в json. т.е. если поле отсутствует, а не равно нулю.

Но я заметил, что это работает, только если объект, который я хочу десериализовать, имеет конструктор, подобный этому

public MyObject(@JsonProperty("id") UUID id, @JsonProperty("url") URL url) {
    this.id = id;
    this.url = url;
}

Это немного проблематично, так как я надеялся использовать @AllArgsConstructor от lombok для генерации конструктора. Но если в конструкторе отсутствует @JsonProperty (..), проверка FAIL_ON_MISSING_CREATOR_PROPERTIES не работает. Вместо этого параметры передаются как нулевые.

Я сталкивался здесь с некоторыми решениями Не могу заставить Джексона и Ломбока работать вместе . Но пока они не работают на меня.

Есть предложения?

--- Обновление ---

Аннотации в моем классе:

@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class MyClass { ... }

1 Ответ

0 голосов
/ 05 июля 2018

Следующая комбинация аннотаций отлично работает с Lombok 1.18.0 и Jackson 2.9 (самые последние версии на июль 2018 года):

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class Foo {
    private UUID id;
    private String url;
}
String json = "{\n" +
              "  \"id\": \"32783be3-5355-41d2-807b-619e3481d220\",\n" +
              "  \"url\": \"http://example.com\"\n" +
              "}";

ObjectMapper mapper = new ObjectMapper();
Foo foo = mapper.readValue(json, Foo.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...