使用动态 DTO 进行部分实体更新

Partial entity update using dynamic DTO

我有一个应用程序,我正在尝试使用 PATCH 请求实施部分更新。

现在我有从 HTTP 检索数据的 DTO 对象,并使用 Orika 库(配置 mapNulls = false)映射到 JPA 实体

到现在为止一切正常,但它不适用于部分更新,因为我的 DTO 对象不区分 null 值和未提供的值。然后,如果我明确地将一个字段设置为 null,Orika 将忽略它并且值保持不变。

然后我考虑使用通用对象而不是 DTO 对象,但这样做我会失去 @JsonProperty 注释的好处,这对于控制哪个字段是 access = Access.READ_ONLY 或不是 access = Access.READ_ONLY 非常有用。

我如何从泛型世界和 DTO 世界中获益?有没有办法反序列化为动态 DTO?

目前不支持此功能。您所能做的就是拥有两个不同的 MapperFactory,一个配置为 mapNulls=true,另一个配置为 mapNulls=false。由于它是简单的 Java 代码,因此无需太多努力即可轻松完成。

最后你将有一个 MapperFacade 用于 PATCH 方法,另一个用于创建更新。

最好将 DTO 作为服务合同保留。