spring组件 RestTemplate + @ResponseBody 使用心得

本文分享了使用Spring RestTemplate进行HTTP请求时的心得,包括简单配置、依赖注入、使用注意事项,特别是针对@ResponseBody返回JSON时遇到的问题,如List对象接收错误及双重序列化问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚刚给公司两个系统写了一个中间件,用于同步一些数据,用了 RestTemplate 这个家伙,确实相当友好,也简化了 http 请求,但是我也走了很多弯路,也被网上的那些各种不完整的博客坑惨了,下面说重点:

一. RestTemplate 简单配置

@Configuration
public class RestTemplateConfig {
    @Bean
    @ConditionalOnMissingBean({ RestOperations.class, RestTemplate.class })
    public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
        RestTemplate restTemplate = new RestTemplate(factory);
        <!--使用 utf-8 编码集的 conver 替换默认的 conver(默认的 string conver 的编码集为"ISO-8859-1")-->
        List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
        Iterator<HttpMessageConverter<?>> iterator = messageConverters.iterator();

        <!--!!!!!!!!!!严重警告,一定不要这么配置-->
        <!--这样就改变的convert的顺序,当接口采用@requestbody接收的时候,会报 parse error-->
        <!--while (iterator.hasNext()) {-->
        <!--    HttpMessageConverter<?> converter = iterator.next();-->
        <!--    if (converter instanceof StringHttpMessageConverter) {-->
        <!--        iterator.remove();-->
        <!--    }-->
        <!--}-->
        <!--messageConverters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));-->

        <!--正确姿势-->
        while (iterator.hasNext()) {
            HttpMessageConverter<?> converter = iterator.next();
            if (converter instanceof StringHttpMessageConverter) {
                ((StringHttpMessageConverter) converter).setDefaultCharset(Charset.forName(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值