
使用 @JsonInclude(Include.NON_EMPTY) 注解可使 ObjectMapper 在序列化和反序列化过程中自动跳过空字符串、null 值及空集合等“空值”,从而避免将空字符串错误覆盖数据库中已存在的有效数据。
使用 `@jsoninclude(include.non_empty)` 注解可使 objectmapper 在序列化和反序列化过程中自动跳过空字符串、null 值及空集合等“空值”,从而避免将空字符串错误覆盖数据库中已存在的有效数据。
在 Spring Boot 或基于 Jackson 的 Web 服务中,当使用 ObjectMapper.updateValue(target, source)(即“合并更新”)方式实现部分字段更新时,一个常见陷阱是:前端传入的空字符串(如 "middleName":"")会被无条件赋值给目标对象字段,导致原本数据库中非空的 middleName 被清空——即使你已在 DTO 类上标注了 @JsonInclude(Include.NON_NULL)。
这是因为 @JsonInclude(Include.NON_NULL) 仅忽略 null 值,而空字符串 "" 是合法的非 null 字符串对象,Jackson 默认仍会将其参与属性赋值。要真正排除空字符串,应改用更严格的包含策略:
通过 REST API 管理 Kibana 保存的对象(仪表板、Lens 可视化等)。适用于:① 以编程方式创建、更新、删除仪表板和 Lens 可视化。
// 在你的 CustomerDetail DTO 类(或具体字段)上修改注解:
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class CustomerDetail {
private String firstName;
private String middleName; // 空字符串将被忽略
private String lastName;
private String addr1;
private String addr2;
// getters & setters...
}⚠️ 注意事项:
-
NON_EMPTY不仅忽略null和"",还适用于空集合(List,Map)、空数组、空Optional等,语义更全面; - 该注解作用于序列化与反序列化双向过程,确保请求体中的空字符串不进入 Java 对象,也防止响应中输出冗余空字段;
- 若需更精细控制(例如仅对
middleName字段生效),可将注解加在字段级:@JsonInclude(JsonInclude.Include.NON_EMPTY) private String middleName;
- 补充建议:在业务层增加空字符串预处理(如
StringUtils.trimToNull())可作为兜底策略,但优先推荐声明式注解方案,更简洁、统一且符合 Jackson 最佳实践。
综上,将 @JsonInclude(Include.NON_NULL) 替换为 @JsonInclude(JsonInclude.Include.NON_EMPTY),即可安全实现“空字符串不覆盖”的部分更新语义,保障数据库数据完整性。

















