欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > RestTemplate修改默认转换器,使用FastJsonConverter

RestTemplate修改默认转换器,使用FastJsonConverter

2024/10/25 18:33:36 来源:https://blog.csdn.net/Yu_Mariam/article/details/140013545  浏览:    关键词:RestTemplate修改默认转换器,使用FastJsonConverter

问题描述:
在使用RestTemplate发送POST请求时,发现发送的数据并未按配置的@JSONField转换,导致服务方一直收不到参数
在这里插入图片描述

排查过程:
将itemList改成Items传输即可

原因分析:
RestTemplate有默认的转换器,所以配置@JSONField 没有作用

解决办法:
修改RestTemplate默认的转换器、或者将变量名改为Items

package com.rimag.adapter.config;import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.http.converter.json.GsonHttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.List;/*** @author: hong* @date: 2024/6/18 10:25* @description*/
@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() {// 设置超时时间HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory();httpRequestFactory.setConnectionRequestTimeout(3000);httpRequestFactory.setConnectTimeout(3000);httpRequestFactory.setReadTimeout(3000);RestTemplate restTemplate = new RestTemplate(httpRequestFactory);//换上fastjsonList<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(StandardCharsets.UTF_8));FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.DisableCircularReferenceDetect);fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);// 添加 FastJsonHttpMessageConverter,优先级高于默认的 MappingJackson2HttpMessageConverter,否则RestTemplate发送请求转换不会按@JSONField注解messageConverters.add(fastJsonHttpMessageConverter);return restTemplate;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com