响应结果
对于返回类型为数组的
如图所示比如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;
}