我的编辑API有这个服务方法,它将我的pojo类Map到一个实体类以进行更新操作。CustomerDetail是我的Dto类。
public CustomerRegistration editCustomerDetails
(Long id, CustomerDetail customerDetail) throws JsonMappingException
{
CustomerRegistration customer = customerRegistrationRepository.findByRegistrationId(id);
if (customer == null)
return null;
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.updateValue(customer, customerDetail);
customer.setModifiedTs(Timestamp.valueOf(LocalDateTime.now()));
customerRegistrationRepository.save(customer);
return customer;
}
字符串
假设我想更新customerID 1的客户详细信息,我的请求主体由以下字段组成:
{
"firstName":"Leon",
"middleName":"",
"lastName":"Kennedy",
"addr1":"cross",
"addr2":"new"
}
型
我的客户表已经有一个customerID 1的中间名。我想忽略表中middleName字段的更新操作,因为请求主体有一个空字符串。在我的情况下,它在表中被设置为null/empty。我如何避免这种情况?
我的pojo类已经用@JsonInclude(Include.NON_NULL)进行了注解
2条答案
按热度按时间6yjfywim1#
尝试将注解值从
字符串
收件人:
型
6qqygrtg2#
在我看来,你试图通过通用方法来实现非常具体的逻辑。
objectMapper.updateValue执行的逻辑非常简单:将源对象转换为目标对象的类型,然后将结果合并到目标对象中。
在你的例子中,你想应用特定的逻辑(跳过更新目标对象的字段,以防它在源对象中为空)。这个逻辑不是由这个方法假设的。这个方法中甚至没有参数可以打开/关闭这个逻辑。
您可以使用objectMapper.readValue将输入字符串解析为目标对象,然后手动应用所需的合并逻辑。