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

时间:2018-06-18 11:54:55

标签: java spring-mvc spring-boot jpa orika

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

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

到目前为止,这种工作正常,但由于我的DTO对象没有将null值与未提供的值区分开来,因此它不能用于部分更新。然后,如果我明确地将字段设置为null,则Orika会忽略它并且值保持不变。

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

我如何从仿制药世界和DTO世界中受益?有没有办法反序列化为动态DTO?

1 个答案:

答案 0 :(得分:0)

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

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

根据服务合同,最好保留DTO。