jackson - 杰克逊 + FAIL_ON_MISSING_CREATOR_PROPERTIES + 龙目岛
问题描述
我正在尝试在 objectMapper 上使用 Jackson 标志
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;
}
这有点问题,因为我希望使用 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 { ... }
解决方案
以下注释组合适用于 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);
推荐阅读
- javascript - 如何将对象数组传递给 Query?
- python - 将元组从函数“导出”到全局变量
- typescript - 从组件获取数据
- azure - 端点 webhook url 上的事件网格订阅的 ARM 部署失败
- hdf5 - 如何将 HDF5 数据集作为 Snakemake 输入/输出?
- ios - 我希望打印的值太长,无法打印 firebase 中的所有值
- excel - 如何从工作表中读取值并检查它们是否存在于 .txt 文件中
- project-reactor - Reactor 项目中的 Fuseable 接口有什么用?
- javascript - 如何在 React 中调用注入到 ReactNative 的 WebView 中的 JavaScript 代码?
- c# - 如何使用 Angular 7 保持 AngularCLIServer 在 asp.net 核心上的构建之间运行