使用动态 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 作为服务合同保留。
我有一个应用程序,我正在尝试使用 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 作为服务合同保留。