You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Java应用中如何避免Dozer映射空白字符串

首先你当前配置里的map-empty-string="false"仅对*无任何字符的空字符串""*生效,带有空格的空白字符串不属于这个拦截范围,因此还是会完成映射。你可以通过以下两种方式实现需求:

方案1:开启字符串自动trim(最简方案)

在<mapping>标签上追加trim-strings="true"属性,Dozer处理字符串字段时会自动去除首尾空格,你的空白字符串" "trim后会变成空字符串,搭配已有的map-empty-string="false"就会自动跳过该字段映射。
修改后的配置如下:

<mapping map-null="false" map-empty-string="false" trim-strings="true">
    <class-a>com.example.howtodoinjava.dozer.models.Student</class-a>
    <class-b>com.example.howtodoinjava.dozer.models.StudentVO</class-b>
    <field>
        <a>batch</a>
        <b>batchName</b>
    </field>
    <field>
        <a>address</a>
        <b>homeAddress</b>
    </field>
</mapping>
</mappings>

注意:这个配置会对当前mapping下的所有字符串字段生效,如果你其他字段需要保留首尾空格,不要用这个方案。

方案2:字段级自定义转换器(更灵活)

如果只需要针对batch字段单独做空白判断,不需要影响其他字段,可以自定义字段转换器:

  1. 编写转换器类:
import org.dozer.CustomConverter;
import org.apache.commons.lang3.StringUtils;

public class BlankStringSkipConverter implements CustomConverter {
    @Override
    public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
        // 源字段是空白字符串直接返回null,搭配map-null=false就不会映射
        if (sourceFieldValue instanceof String str && StringUtils.isBlank(str)) {
            return null;
        }
        return sourceFieldValue;
    }
}
  1. 修改映射配置,给batch字段指定转换器:
<mapping map-null="false" map-empty-string="false">
    <class-a>com.example.howtodoinjava.dozer.models.Student</class-a>
    <class-b>com.example.howtodoinjava.dozer.models.StudentVO</class-b>
    <field custom-converter="com.example.xxx.BlankStringSkipConverter">
        <a>batch</a>
        <b>batchName</b>
    </field>
    <field>
        <a>address</a>
        <b>homeAddress</b>
    </field>
</mapping>
</mappings>

内容的提问来源于stack exchange,提问作者happytohelp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:15:07