RestTemplate序列化对象时,对于某些特殊数组的处理

响应结果

对于返回类型为数组的
如图所示比如A… 我们可以通过包装类加List<包装类> 来获取.
但是如果是B类型的,直接通过包装类数组获取会抛出异常…Unrecognized field "wf" (XXXXX.class), not marked as ignorable
序列化对象

解决

对于A类, 只需要配置 List<Web> 对象数据进行承接, RestTemplate 就可以帮我们序列化

{
	// 属性数组
    @JsonProperty("web")
    private List<Web> web;
}
// 包装类
class Web {
    @JsonProperty("key")
    public String key;

    @JsonProperty("value")
    public List<String> value;
}

对于B类, 则需要重写 RestTemplate 的配置…并配合 @JsonRootName 注解进行序列化和反序列化的配置
RestTemplate 配置, 添加 objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);

/**
 * RestTemplate 配置类信息
 *
 * @author Jion
 */
@Configuration
public class RestTemplateConfig {

    @Bean
    RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder, ObjectMapper objectMapper) {
        // 支持包装属性的序列化与反序列
        objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
        objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);
        // 配置新的 Jackson 消息转换器
        MappingJackson2HttpMessageConverter httpMessageConverter = new MappingJackson2HttpMessageConverter();
        httpMessageConverter.setObjectMapper(objectMapper);
        // 添加新的 消息转换器
        restTemplateBuilder.messageConverters(httpMessageConverter);

        return restTemplateBuilder.build();
    }
}

修改包装类, 添加 @JsonRootName

{
    @JsonProperty("wfs")
    public List<Wf> wfs;
}

// 包装根属性
@JsonRootName("wf")
class Wf {
    @JsonProperty("name")
    public String name;

    @JsonProperty("value")
    public String value;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值