在使用restTemplate调用接口,返回的参数封装成实体,这个实体里又有个参数是List<实体>的时候报这个错误
贴一下返回的实体
@Getter
@Setter
@ToString
public class LoginRespEntity implements Serializable{
protected LoginRespEntity() {
super();
}
/**
* 序列号
*/
private static final long serialVersionUID = 3266109241496143813L;
private String code;
private List<LoginBO> data;
}
出现这个问题的原因是,jackson转换时貌似不支持list。具体原因我还没找到,有知道原因的一定评论告知,谢谢~
解决办法是:把restTemplate的转换器换成fastjson的
贴下代码
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
RestTemplate restTemplate = new RestTemplate(new SimpleClientHttpRequestFactory());
//换上fastjson
List<HttpMessageConverter<?>> messageConverters= restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator=messageConverters.iterator();
while(iterator.hasNext()){
HttpMessageConverter<?> converter=iterator.next();
//原有的String是ISO-8859-1编码 去掉
if(converter instanceof StringHttpMessageConverter){
iterator.remove();
}
//由于系统中默认有jackson 在转换json时自动会启用 但是我们不想使用它 可以直接移除
if(converter instanceof GsonHttpMessageConverter || converter instanceof MappingJackson2HttpMessageConverter){
iterator.remove();
}
}
messageConverters.add(new StringHttpMessageConverter(Charset.forName("utf-8")));
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.DisableCircularReferenceDetect);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
messageConverters.add(fastJsonHttpMessageConverter);
return restTemplate;
}
}
转换代码来自博客:https://blog.csdn.net/a469517790/article/details/88051617
记录一下,互相学习