jackson 如何使ObjectMapper在格式化过程中忽略空字符串字段?

t40tm48m  于 2023-11-19  发布在  其他
关注(0)|答案(2)|浏览(225)

我的编辑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)进行了注解

6yjfywim

6yjfywim1#

尝试将注解值从

@JsonInclude(Include.NON_NULL) // ignores null values

字符串
收件人:

@JsonInclude(Include.NON_EMPTY) // ignores empty values (empty string, null, etc)

6qqygrtg

6qqygrtg2#

在我看来,你试图通过通用方法来实现非常具体的逻辑。

objectMapper.updateValue执行的逻辑非常简单:将源对象转换为目标对象的类型,然后将结果合并到目标对象中。

在你的例子中,你想应用特定的逻辑(跳过更新目标对象的字段,以防它在源对象中为空)。这个逻辑不是由这个方法假设的。这个方法中甚至没有参数可以打开/关闭这个逻辑。
您可以使用objectMapper.readValue将输入字符串解析为目标对象,然后手动应用所需的合并逻辑。

相关问题