You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Retrofit库中将YAML响应体解析为POJO对象

Retrofit处理YAML格式响应的解决方案

方案一:基于Jackson YAML封装自定义转换器(最简便)

该方案复用Jackson成熟的序列化/反序列化能力,仅需少量代码即可完成转换器开发:

  • 首先导入相关依赖,需同时引入Jackson的YAML处理模块和Retrofit核心依赖:
    // jackson yaml核心依赖
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.15.2'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2'
    
  • 实现自定义Converter.Factory,代码示例如下:
    public class YamlConverterFactory extends Converter.Factory {
        private final ObjectMapper yamlMapper = new YAMLMapper();
    
        public static YamlConverterFactory create() {
            return new YamlConverterFactory();
        }
    
        // 响应体转换器:将YAML格式响应转成实体类
        @Override
        public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
            JavaType javaType = yamlMapper.getTypeFactory().constructType(type);
            return value -> {
                try (InputStream inputStream = value.byteStream()) {
                    return yamlMapper.readValue(inputStream, javaType);
                }
            };
        }
    
        // 如需提交YAML格式的请求体,补充以下方法
        @Override
        public Converter<?, RequestBody> requestBodyConverter(Type type, Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
            JavaType javaType = yamlMapper.getTypeFactory().constructType(type);
            return (Converter<Object, RequestBody>) value -> RequestBody.create(
                yamlMapper.writeValueAsBytes(value),
                MediaType.get("application/x-yaml")
            );
        }
    }
    
  • 构建Retrofit实例时注册转换器即可生效:
    Retrofit retrofit = new Retrofit.Builder()
        .baseUrl("你的接口根地址")
        .addConverterFactory(YamlConverterFactory.create())
        .build();
    

方案二:基于其他YAML库自定义转换器

如果你偏好使用SnakeYAML等其他YAML处理库,替换上述代码中Jackson相关的序列化/反序列化逻辑即可,核心实现逻辑不变:

  • 实现Converter<ResponseBody, T>接口完成响应体YAML转实体类的逻辑
  • 实现Converter<T, RequestBody>接口完成实体类转YAML请求体的逻辑
  • 继承Converter.Factory封装上述两个转换器的生成逻辑

临时调试或者项目中YAML格式响应占比极低的场景,也可以先用scalars转换器把YAML响应以字符串格式拿到,再在业务层自行调用YAML解析库做转换,不需要额外封装转换器。

内容的提问来源于stack exchange,提问作者Mateusz Łuczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:54:05