🥑 自定义转换器
在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)
上次更新: 2023/06/19, 17:37:19