Forest Forest
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
💒 首页
  • v1.5.30
  • v1.5.28
  • 🎄 ForestX
🌰 案例
💖 支持
🛫 更新记录
🧢 开发团队
⚒️ 参与贡献
  • MaxKey - 业界领先的身份管理和认证产品 (opens new window)
  • Snowy - 国内首个国密前后端分离快速开发平台 (opens new window)
  • Eoapi - 一个开源、可拓展的 API 工具平台 (opens new window)
  • Gitee (opens new window)
  • Github (opens new window)
  • 序言

    • 🎁 新手介绍
    • 📖 文档
    • 🌰 使用案例
    • 🕵️‍ 关于作者
    • 👨‍🎓 贡献者列表
  • 入门

    • 🎬 安装配置说明
    • 🏹 Springboot环境安装
    • 📐 Springboot环境配置
    • 🎯 Springboot环境使用
    • 🏹 Spring环境安装
    • 📐 Spring环境配置
    • 🎯 Spring环境使用
    • 🏹 原生Java环境安装
    • 📐 原生Java环境配置
    • 🎯 原生Java环境使用
    • 🧬 编程式接口
  • 配置项

    • 👜 Springboot环境配置项
    • 👝 Spring环境配置项
    • 🎒 原生Java环境配置项
    • 📚 配置优先级/作用域
  • 声明式接口

    • 🧱 构建接口
    • 🍀 请求方法
    • 🚚 请求地址
    • 🎈 URL 参数
    • 🍭 请求头
    • 👔 请求体
    • 🍮 后端框架
    • 🧁 接口注解
    • 📬 接收数据
    • 🍛 数据转换
    • 🍓 成功/失败条件
    • 🍌 重试机制
    • 🥂 重定向
    • 🍔 Gzip解压
    • 🎂 日志管理
    • ⚽ 回调函数
    • 🍟 异步请求
    • 🛡️ HTTPS
    • 🍪 使用Cookie
    • 🛸 使用代理
    • 🍉 上传下载
    • 🚑 异常处理
  • 编程式接口

    • 请求API

      • 🚀 请求对象
      • 🚢 请求属性
      • ✨ 执行请求
      • 🎊 后端框架
      • 🎪 请求类型
      • 🔮 请求地址
      • 🧀 URL 参数
      • 🚅 请求头
      • 🚋 请求体
      • ⚓ 回调函数
      • 🚁 异步请求
      • 🥯 Cookie
      • 🍜 成功/失败条件
      • 🌶️ 重试机制
      • ⛵ 重定向
      • 🛰️ 请求代理
    • 响应API

      • 🌠 响应对象
      • ✒️ 读取数据
      • 🦋 响应状态码
      • 🏥 响应错误处理
      • 🎧 响应头
      • 🥞 Cookie
  • 模板表达式

    • 🍬 Hello World
    • 🍹 配置属性引用
    • 🍖 变量引用
    • 🥃 动态变量绑定
    • 🥗 参数序号引用
    • 🍍 引用对象属性
    • 🥝 调用对象方法
  • 高级特性

    • 🥪 拦截器
    • 🍏 自定义注解
    • 🍇 组合注解
    • 🥑 自定义转换器
      • 实现 ForestConverter 接口
      • 注册全局自定义转换器
      • Springboot 下注册全局转换器
      • 接口/方法级别自定义转换器
  • v1.5.28文档
  • 高级特性
公子骏
2022-07-20
目录

🥑 自定义转换器

在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

# 注册全局自定义转换器

注册到全局配置中

    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
    # 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
    <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
    // 设置JSON转换器
    forestConfiguration.setJsonConverter(new MyJsonConverter());
    // 设置XML转换器
    forestConfiguration.getConverterMap().put(ForestDataType.XML, new MyXmlConverter());
    
    
    1
    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

    # 接口/方法级别自定义转换器

    也同上文的 《配置接口/方法级别转换器》一样,通过@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
    帮助我们改善此文档 (opens new window)
    上次更新: 2023/03/07, 12:59:48
    🍇 组合注解

    ← 🍇 组合注解

    Theme by Vdoing | Copyright © 2016-2023 公子骏 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式