# 自定义转换

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

{% hint style="info" %}
从映射对象的字段拷贝到本字段时，converter配置的转换器生效；反之，从本字段拷贝到映射对象的字段时，inverseConverter配置生效。
{% endhint %}

```java
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()) // "男"
```

{% hint style="info" %}
自定义转换器的接口定义和抽象类说明请参考[`TypeConverter`接口及相关子类的定义](https://ankang.gitbook.io/commons/ru-men/gai-nian#typeconverter)
{% endhint %}

{% hint style="warning" %}
如果转换器中需要依赖于某个Spring Bean，可以使用`@Component`注解将自定义的转换器纳入Spring的管理，详细说明请参考：
{% endhint %}
