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字段单独做空白判断,不需要影响其他字段,可以自定义字段转换器:
- 编写转换器类:
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; } }
- 修改映射配置,给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
相关产品推荐
相关产品推荐

