自定义转换

对于无法自动处理的情形,使用者需要自定义TypeConverter完成源字段到目标字段的转换,通过@Mapping注解的converterinverseConverter属性,将转换器应用于映射中。两个属性均支持以数组形式传入多个转换器。

从映射对象的字段拷贝到本字段时,converter配置的转换器生效;反之,从本字段拷贝到映射对象的字段时,inverseConverter配置生效。

class Foo {
    Boolean gender = false;
}
class FooDto {
    @Mapping(converter=GenderConverter.class, inverseConverter=GenderConverter.class)
    String gender;
}
class GenderConverter extends AbstractDictionaryConverter {
    @Override
    protected Map<Object, Object> getDictionary() {
        Map<Object, Object> dictionary = new HashMap<>();
        dictionary.put("0", "男");
        dictionary.put("1", "女");
        return dictionary;
    }
}

FooDto fooDto = BeanUtils.copyProperties(foo, FooDto.class);

System.out.println(fooDto.getGender()) // "男"

自定义转换器的接口定义和抽象类说明请参考TypeConverter接口及相关子类的定义

如果转换器中需要依赖于某个Spring Bean,可以使用@Component注解将自定义的转换器纳入Spring的管理,详细说明请参考:

Last updated