🥑 自定义转换器
在Forest中,每个转换类型都对应一个转换器对象,比如JSON格式的转换器有com.dtflys.forest.converter.json.ForestFastjsonConverter、com.dtflys.forest.converter.json.ForestGsonConverter、com.dtflys.forest.converter.json.ForestJacksonConverter三种,分别是基于FastJson、Gson、Jackson三种不同的JSON序列化框架。
当然,您也可以自定义自己的转换器,以适应自己项目的需要。只需三步便可完成自定义扩展转换器。
# 实现 ForestConverter 接口
定义一个转换器类,并实现com.dtflys.forest.converter.ForestConverter接口
/**
 *  自定义一个Protobuf的转换器,并实现ForestConverter接口下的convertToJavaObject方法
 */
public class MyProtobufConverter implements ForestConverter {
    public <T> T convertToJavaObject(String source, Class<T> targetType) {
        // 将字符串参数source转换成目标Class对象
    }
    public <T> T convertToJavaObject(String source, Type targetType) {
        // 将字符串参数source转换成目标Type(可能是一个泛型类型)对象
    }
}
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 注册全局自定义转换器
注册到全局配置中
forest:
  converters:
    # JSON转换器
    json:
      # JSON转换器设置为MyJsonConverter转换器
      type: com.xxx.MyJsonConverter
      
    # XML转换器
    xml:
      # 配置为MyXmlConverter转换器
      type: com.xxx.MyXmlConverter
 1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# JSON转换器
# JSON转换器设置为MyJsonConverter转换器
forest.converters.json.type=com.xxx.MyJsonConverter
# XML转换器
# 配置为MyXmlConverter转换器
forest.converters.xml.type=com.xxx.MyXmlConverter
 1
2
3
4
5
6
2
3
4
5
6
<forest:configuration>
    <!-- Forest转换器定义 开始 -->
    <!-- 设置JSON转换器 -->
    <!-- JSON转换器设置为MyJsonConverter转换器 -->
    <forest:converter dataType="json" class="com.xxx.MyJsonConverter">
    </forest:converter>
    <!-- Forest转换器定义 结束 -->
    <!-- 设置XML转换器 -->
    <!-- 设置为MyXmlConverter转换器 -->
    <forest:converter dataType="xml" class="com.xxx.MyXmlConverter">
    </forest:converter>
    <!-- Forest转换器定义 结束 -->
</forest:configuration>
 1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
// 设置JSON转换器
forestConfiguration.setJsonConverter(new MyJsonConverter());
// 设置XML转换器
forestConfiguration.getConverterMap().put(ForestDataType.XML, new MyXmlConverter());
 1
2
3
4
5
2
3
4
5
// Make sure to add code blocks to your code group
# Springboot 下注册全局转换器
同上文的 《springboot 下配置全局转换器》一样,可通过@Bean注解方法将自定义转换器实例注入到 Spring 上下文
@Bean
public MyProtobufConverter myProtobufConverter() {
    return new MyProtobufConverter();
}
 1
2
3
4
2
3
4
# 接口/方法级别自定义转换器
也同上文的 《配置接口/方法级别转换器》一样,通过@BodyType注解来指定自定义的转换器类
// 接口级别转换器定义
@BodyType(type = "protobuf", encoder = MyProtobufConverter.class)
public interface MyClient {
    // 方法级别转换器定义
    @Get("/data")
    @BodyType(type = "protobuf", encoder = MyProtobufConverter2.class)
    String sendData(@Body MyData data);
}
 1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
帮助我们改善此文档  (opens new window)
  上次更新: 2024/12/26, 12:59:11