我正在尝试在objectMapper上使用Jackson标志
objectMapper.enable(DeserializationFeature.FAIL_ON_MISSING_CREATOR_PROPERTIES);
如果未在json中设置构造函数参数,则这将导致对象反序列化失败。也就是说,如果缺少某个字段(而不是设置为null)。
但是我注意到,只有当我要反序列化的对象具有这样的构造函数时,它才起作用
public MyObject(@JsonProperty("id") UUID id, @JsonProperty("url") URL url) {
this.id = id;
this.url = url;
}
这有点问题,因为我希望使用lombok的@AllArgsConstructor生成构造函数。但是,如果构造函数缺少@JsonProperty(..),则FAIL_ON_MISSING_CREATOR_PROPERTIES检查不起作用。而是将参数作为null传递。
我在Can't make Jackson and Lombok work together遇到了一些解决方案。但是到目前为止,他们还没有为我工作。
有什么建议吗?
---更新---
我班上的注释是
@Data
@Builder
@ToString
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public class MyClass { ... }
答案 0 :(得分:0)
以下注释组合在Lombok 1.18.0和Jackson 2.9(截至2018年7月的最新版本)中可以很好地工作:
@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);