Spring restTemplate 参数乱码

Spring restTemplate 参数乱码

客户端代码:

public static RestTemplate creatTemplate(){
        RestTemplate restTemplate=new RestTemplate();

        FormHttpMessageConverter fc = new FormHttpMessageConverter();

        StringHttpMessageConverter s = new StringHttpMessageConverter(StandardCharsets.UTF_8);

        List<HttpMessageConverter<?>> partConverters = new ArrayList<HttpMessageConverter<?>>();
        partConverters.add(s);
        partConverters.add(new ResourceHttpMessageConverter());
        fc.setPartConverters(partConverters);

        MappingJackson2HttpMessageConverter jsonMessageConverter = 
        new MappingJackson2HttpMessageConverter();
        // Add supported media type
        List<MediaType> supportedMediaTypes = new ArrayList<MediaType>();
        supportedMediaTypes.add(new MediaType("text", "plain"));
        supportedMediaTypes.add(new MediaType("charset", "utf-8"));
        supportedMediaTypes.add(new MediaType("text", "html"));
        supportedMediaTypes.add(new MediaType("application", "json"));
        jsonMessageConverter.setSupportedMediaTypes(supportedMediaTypes);
        restTemplate.getMessageConverters().addAll(Arrays.asList(fc, jsonMessageConverter));
        ClientHttpRequestInterceptor interceptor=   new ClientHttpRequestInterceptor() {   
            @Override   
            public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)   
            throws IOException {   
                    HttpRequestWrapper wrapper = new HttpRequestWrapper(request);   
                    MediaType mt=MediaType.valueOf("application/json;charset=utf-8"); 
                    System.out.println(mt.getCharSet());
                    wrapper.getHeaders().setContentType(mt);   
                    wrapper.getHeaders().setAccept(Collections.singletonList(new MediaType("application", "json")));  
                    wrapper.getHeaders().setAcceptCharset(Collections.singletonList(Charset.forName("utf-8")));
                    return execution.execute(wrapper, body);   
                }

            };  
        restTemplate.setInterceptors(Collections.singletonList(interceptor));
        return restTemplate;
    }


    public static void main(String[] args) {
        JSONObject js=new JSONObject();
        JSONObject appSign=new JSONObject();
        appSign.put("appkey", "xunyukeji");
        appSign.put("timestamp", "12345678900");
        appSign.put("sign", "F206BEB57018BDA4B2369CE998A5F1C5");
        js.put("type", "S");
        js.put("apiSign", appSign);
        JSONArray list=new JSONArray();
        JSONObject item=new JSONObject();
        item.put("message", "订单发货日期2017-01-10 16:13:31");
        item.put("status", "S");
        item.put("code", "shunfeng");
        item.put("tradeNum", "5455454");
        item.put("expressName", "顺丰快递");
        list.add(item);
        js.put("list", list);
        RestTemplate restTemplate=creatTemplate();

        JSONObject result=restTemplate.postForObject("http://192.168.0.126/webapp/wcs/stores/servlet/SBNUpdateOrderStatusCmd", js.toString(), JSONObject.class);
        System.out.println(result.toString());


    }

服务端参数处理代码:

 public String getParams(HttpServletRequest request) throws IOException{
        Enumeration<String> names = request.getHeaderNames();  
        while (names.hasMoreElements()) {  
            String name = names.nextElement();  
            System.out.println("["+name + " : " + request.getHeader(name) + "]");  
        }  
        request.setCharacterEncoding("utf-8");
        // 读取请求内容
        BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream()));
        String line = null;
        StringBuilder sb = new StringBuilder();
        while((line = br.readLine())!=null){
            sb.append(line);
        }
        // 将资料解码
        String reqBody = new String(sb.toString().getBytes("ISO-8859-1"),"UTF-8");
        return  reqBody;
    }

服务端接收的请求头和处理后的参数

 [17-2-9 12:53:32:875 CST] 000000ab SystemOut     O [Accept : application/json]
[17-2-9 12:53:32:876 CST] 000000ab SystemOut     O [Content-Type : application/json;charset=utf-8]
[17-2-9 12:53:32:876 CST] 000000ab SystemOut     O [Accept-Charset : utf-8]
[17-2-9 12:53:32:876 CST] 000000ab SystemOut     O [User-Agent : Java/1.7.0_79]
[17-2-9 12:53:32:876 CST] 000000ab SystemOut     O [Host : 192.168.0.126]
[17-2-9 12:53:32:877 CST] 000000ab SystemOut     O [Connection : keep-alive]
[17-2-9 12:53:32:877 CST] 000000ab SystemOut     O [Content-Length : 235]
[17-2-9 12:53:33:436 CST] 000000ab SystemOut     O 2017-02-09 12:53:33,434 INFO [updateOrder] - 修改订单接收参数{"type":"S","apiSign":{"appkey":"xunyukeji","timestamp":"12345678900","sign":"F206BEB57018BDA4B2369CE998A5F1C5"},"list":[{"message":"??????2017-01-10 16:13:31","status":"S","code":"shunfeng","tradeNum":"5455454","expressName":"????"}]}
[17-2-9 12:53:34:102 CST] 000000ab SystemOut     O F206BEB57018BDA4B2369CE998A5F1C5
[17-2-9 12:53:34:103 CST] 000000ab SystemOut     O 2017-02-09 12:53:34,102 INFO [updateOrder] - 密钥验证成功

可以看到中文部分都是乱码的,客户端和服务端的编码格式都是UTF-8,而且同样的代码服务端用main方法httpclient调用,参数处理后却是正常的

2个回答

你调用服务器端代码先编码,服务器端解析

qq_19337707
此物最相思Hu 你的意思是把post过去的字符串先编码成UTF-8格式的?现在是头信息设置的utf-8格式的,而且环境的编码格式也是utf-8。
接近 3 年之前 回复

在RestTemplate调用时增加Utf-8头信息,如
// 设置头信息
HttpHeaders headers = new HttpHeaders();
// 设置参数类型
headers.setContentType(new MediaType("application", "json", Charset
.forName("UTF-8")));

sun1021873926
夕阳雨晴 可参考这篇文章。http://www.tuicool.com/articles/yuuUb2
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
spring boot RestTemplate 解决乱码以及实现接口对接问题
RestTemplate resttemplate = new RestTemplate(); String query_response = resttemplate.postForObject(url+"/query", "{}", String.class);//url 是对方的url  ,后面query  是对方的post;"{}"规定是我传入是json l HttpHeaders
Spring RestTemplate出现乱码解决方法
发起Http请求有很多方法,Spring本身提供了RestTemplate类,简化了发起HTTP请求以及处理响应的过程,并且支持REST 我们一般都是在xml配置文件中注入RestTemplate实现单例,一般初始化时会指定一些Converter用于不同的请求解析,下面是我之前的配置 &amp;lt;bean id=&quot;restTemplate&quot; class=&quot;org.springframework.w...
RestTemplate发送中文参数乱码问题
HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); headers.add("Accept", MediaType.APP
Spring RestTemplate结果中文乱码解决方案
restTemplate = new RestTemplate(); List> converterList = restTemplate.getMessageConverters(); converterList.remove(1); //移除StringHttpMessageConverter HttpMessageConverter converter = new StringHtt
RestTemplate 中文乱码配置
restTemplate作为spring web client下的一个工具类 对http请求做了一层封装,用起来也更加简洁容易,但最近遇到一个问题就是在发送请求时由于请求中包含中文导致乱码,都变成???????一堆问号,网上很多解决方案,但很多都比较…..先看说如何解决: @Bean配置方法:@Bean public RestTemplate restTemplate() {
RestTemplate解决乱码问题
spring是一个非常强大的东西,其中提供了一个工具类 RestTemplate 主要提供http服务, RestTempalate 字符串类型默认StringHttpMessageConverter做转码,而StringHttpMessageConverter的默认编码集是ISO8859-1,本工程编码是UTF-8 故发送到服务器端会存在中文乱码 。 把restTempalate 中 Strin...
关于Spring RestTemplate乱码问题解决
今天遇到一个问题使用RestTemplate发出http请求时,返回的结果中,中文会乱码,百度了一下,其中的一个解决办法就是把spring 的StringHttpMessageConverter 的源码改了重新编译后替换,这个方法太粗暴了,看了一下spring doc 这个StringHttpMessageConverter  的默认为"ISO-8859-1" 但也有一个设置编码的构造方法如图
SpringBoot中,RestTemplate中文乱码解决方案
1、new一个RestTemplate:SimpleClientHttpRequestFactory httpRequestFactory = new SimpleClientHttpRequestFactory(); httpRequestFactory.setReadTimeout(35000); httpRequestFactory.setConnectTimeout(5000); RestT
restTemplate公用魔板使用及中文乱码问题
restTemplate是spring提供的一个发送http请求的工具,我们知道spring里面有httpclient实现http请求,但是httpclient的使用相对繁琐,restTemplate使用就方便多了,而且restTemplate能将返回结果自动映射到bean中,不需要我们自己处理。不过在使用的时候遇到了中文乱码问题,我们知道http发送post请求时是以表单方式提交请求参数,而re
解决spring3.0.5使用RestTemplate发送post请求响应中文乱码问题
说明:      1:使用spring3.0.5 post响应编码类型,更加请求url响应内容的编码决定,请求的url没有设置响应编码,默认为ISO-8859-1   2:  使用如下代码解析请求: package com.spring.rest; import java.io.IOException; import java.util.HashMap; imp
restTemplate使用及中文乱码问题
restTemplate是spring提供的一个发送http请求的工具,我们知道spring里面有httpclient实现http请求,但是httpclient的使用相对繁琐,restTemplate使用就方便多了。不过在使用的时候遇到了中文乱码问题,我们知道http发送post请求时是以表单方式提交请求参数,2而restTemplate中表单内string的编码方式默认是ISO-8859-1编码
Spring RestTemplate 调用天气预报接口乱码的解决
Spring RestTemplate 调用天气预报接口可能遇到中文乱码的问题,解决思路如下。 问题出现 我们在网上找了一个免费的天气预报接口 http://wthrcdn.etouch.cn/weather_mini?citykey=101280601。我们希望调用该接口,并将返回的数据解析为 JSON 格式。 核心业务逻辑如下: private WeatherResponse ...
解决Springboot项目里调用RestTemplate中文乱码问题
/** * 解决restTemplate调用乱码 * @param restTemplate */ public static void reInitMessageConverter(RestTemplate restTemplate){ List&amp;lt;HttpMessageConverter&amp;lt;?&amp;gt;&amp;gt; converterList=restTemplate.getM...
【web】Spring RestTemplate提交时设置POST请求参数
在web开发时进程遇到需要编写一些小的测试用例用于测试api接口是否可用,此时使用Spring框架的开发者大多会想到使用RestTemplate。本文实现一个使用RestTemplate发起GET请求,同事设置GET请求的http头的示例。 1、创建测试类的基类 创建一个测试类的基类BaseTester,用于导入测试类的配置文件,本例中配置文件使用的时java注解的config类。基类代码
Spring cloud restTemplate 传递复杂参数(多个对象)
使用微服务的时候往往服务之间调用比较麻烦,spring cloud提供了Feign接口调用,RestTemplate调用的方式这里我探讨下RestTemplate调用的方式:服务A:接收三个对象参数 这三个参数的是通过数据库查询出来的服务B:要调用服务A 服务B提供了查询三个参数的方法,后面要使用三个参数对于服务A,处理的方式有两中1. 服务B提供一个Feign接口将查询三个参数的方法公开,服务...
初探RestTemplate--解决中文乱码问题
本文完全承接上一篇文章,如果你还没有看过,建议先阅读完再看下去,如果你没有兴趣也可以直接拉到本文末尾,查看我对中文乱码的解决方案。
Spring RestTemplate中几种常见的请求方式
在Spring Cloud中服务的发现与消费一文中,当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我
Spring Boot(三):RestTemplate提交表单数据的三种方法
在REST接口的设计中,利用RestTemplate进行接口测试是种常见的方法,但在使用过程中,由于其方法参数众多,很多同学又混淆了表单提交与Payload提交方式的差别,而且接口设计与传统的浏览器使用的提交方式又有差异,经常出现各种各样的错误,如405错误,或者根本就得不到提交的数据,错误样例如下:Exception in thread "main" org.springframework.web
【问题集】spring中使用RestTemplate上传文件出现中文乱码
情况是这样,在项目用调用文件服务的文件上传接口,出现存储的文件名显示为问号。 HttpHeaders requestHeaders = uploadUtility.setHeaders(); MultiValueMap&amp;amp;amp;amp;lt;String, Object&amp;amp;amp;amp;gt; form = uploadUtility.getMultiValueMap(files); HttpEntity&amp;amp;amp;amp;lt;MultiVa...
RestTemplate传递对象或参数访问SpringMVC
最近在优化项目,将里面的交易日志插入部分分离了出来,现在就要将主系统得到的日志发送到 日志系统,来减轻主项目对数据库的压力,现将日志发送给日志系统的方案有三个,其一为 RestTemplate发送,其二为kafka,其三为PostMethod。此处仅讲解RestTemplate的具体用 法,以备后用。 服务端代码 @RequestMapping("/json.do") p
Java RestTemplate post请求传递参数遇到的坑
    最近使用Spring 的 RestTemplate 工具类请求接口的时候发现参数传递的一个坑,也就是当我们把参数封装在Map里面的时候,Map 的类型选择。 使用RestTemplate post请求的时候主要可以通过三种方式实现    1、调用postForObject方法  2、使用postForEntity方法 3、调用exchange方法     postForObject和pos...
Spring RestTemplate get方式发送数据服务器端拿到为空
在使用Spring restTemplate类测试url接口的时候,使用get请求发送参数服务器端拿不到请求数据。 请求代码是这样的  Map map = new HashMap<>(); map.put("p1", "myValue"); String url = "http://localhost:8080/sayHello";
spring cloud 做微服务时关于RestTemplate中的各种请求方法的使用总结
spring cloud 做微服务时关于RestTemplate的使用总结 先看看RestTemplate类的Outline: 最上面的成员和下面的几个构造方法可以先大概看一下。就是选择性的去构造消息转换器,用来接收和传递相应的类型的HTTP请求数据。 下面的是重点,各种HTTP请求如下: GET请求的有: 先看前端3个getForObject方法。重载的3个方法,其区别就是传参...
RestTemplate使用gzip压缩调用接口
RestTemplate使用gzip压缩调用接口,首先要开启Apache或nginx的gzip支持。开启gzip可以自己百度一下。我配置了Apache的gzip支持,但是只有页面的可以压缩,调用接口的好像没成功。  开启后 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import
SpringMVC提高篇(五):RestTemplate的应用
记得刚到公司的时候,一直在使用HTTPClient这个包每次使用还必须到三个包,真是头大,而且写法都是头大。今天看了看Spring4.0 实践没想到 Spring中早早的已经封装了该工具。 String uri = "http://example.com/hotels/1/bookings"; PostMethod post = new PostMethod(uri); String requ
RestTemplate 请求参数格式JSON
我们一般在项目中会遇到某个需求和上一个项目的需求一模一样,那我们就会直接去访问之前项目的接口,不会在另写,或者说调用3方接口。这就用到RestTemplate ,RestTemplate简单的理解就是:简化了发起 HTTP 请求以及处理响应的过程。自己在本地搭建了两个项目,通过B项目去访问A项目中的接口并处理返回数据;还是老样子,直接看代码。我首先搭建了两个项目分别是spring-boot和spr...
RestTemplate 发送json格式的http请求
主方法:ResponseEntity responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Student.class, aa); 说明: 0. url 请求路径; 1. exchange可以发送HttpMethod.POST,DELE,GET,PUT请求; 2. entity包含请求的对象和消息头;
RestTemplate 模拟URL请求,处理多个请求参数,设置head中cookie
注意点设置 headers.add(&quot;Accept&quot;, MediaType.APPLICATION_JSON.toString());没设置情况下,Spring后台无法匹配相应的json参数 多个参数采用MultiValueMap&amp;lt;String, Object&amp;gt; params    @Testpublic void searchActionTest(){ String...
Spring RestTemplate中常用的请求方式
本文主要从以下四个方面来看RestTemplate的使用: GET请求POST请求PUT请求DELETE请求 GET请求 在RestTemplate中,发送一个GET请求,我们可以通过如下两种方式: 第一种:getForEntity getForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封
使用RestTemplate如何上传文档
HttpHeaders headers = new HttpHeaders(); headers.add("Accept", MediaType.APPLICATION_JSON.toString()); headers.setContentType( MediaType.parseMediaType("multipart/f
RestTemplate 发送 get 请求使用误区 多值为null
首先看一下官方文档是怎么描述的,传递多个值的情况(注意例子中用到的@pathParam,一般要用@queryParam) RestTemplate 实例 @Configuration public class RestConfiguration { @Bean @ConditionalOnMissingBean({RestOperations.class, RestTem
使用spring RestTemplate进行rest接口测试
使用spring RestTemplate进行rest接口测试 Rest 代表性状态传输(Representational State Transfer,REST)。 由于约定大于配置的讨论,主流 Web 2.0 服务提供者(包括 Yahoo、Google 和 Facebook)采用了更易于使用、面向资源的模型来公开其服务,而放弃了SOAP或者WSDL。 RestTemplate
RestTemplate的post请求json格式问题
1. 返回格式不正确,发现问题 由于缺少经验,传入一个body,但是在return时不是json格式,导致无法响应的问题,如下: public GlobalMessage test(TestBody body){ return restTemplate.postForEntity("http://testDemo/test", body, Globa
Spring通过RestTemplate传送数据
今天调接口的时候用到了RestTemplate调用,但是传过去的字符编码却是ISO-8859-1,百度一下,发现Resttemplate默认编码就是ISO-8859-1,传数据前需要设置一下 具体设置如下 HttpHeaders headers =new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8
使用 RestTemplate 发送 post 请求传递参数
注意: post 请求的参数不能用 HashMap 封装,应该使用 MultiValueMap 写法参考 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap&amp;lt;String, String&amp;gt; m...
restTemplate上传文件
在项目中遇到一个需求:客户端请求中间转发服务器,然后由中间转发服务器,转发请求到具体项目中处理在客户端上传文件的时候,具体项目接收不到请求,后来查了下具体原因,是中间件服务器没有把图片数据传送到具体项目中解决办法,在中间件服务器中解析请求,再使用restTemplate转发请求具体项目解析文件和数据的代码@RequestMapping(value = &quot;doConfirmProduction&quot;, ...
Spring RestTemplate的使用(解决put,delete方法无返回值问题)
Spring提供了RestTemplate,可以利用RestTemplate调用REST资源。 同时也可以用作服务端到服务端发送请求。 在Java后台开发中,也可以使用RestTemplate来测试接口。 RestTemplate支持get,put,delete,post操作。package com.test;import org.springframework.http.ResponseEn
spring使用RestTemplate来调用其他接口
在开发中,有的时候我们得调用别人提供的接口API,在这里介绍使用RestTemplate的方式来调用别人的API,简单方便为了方便将数据转化为json 格式,在这里我引入了fastjson&amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;com.alibaba&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;fastjson&amp;lt;/artif...
Spring返回text/plain出现中文乱码
今天在RestTemplate调试的时候发现返回的中文出现了乱码,使用POST
springboot开发微信后台时resttemplate的坑
https://blog.csdn.net/kinginblue/article/details/52706155
【Spring学习】RestTemplate访问Rest服务总结
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。Clien...
关于RestTemple发送微信请求遇到的坑
一、发送请求中文乱码RestTemple默认字符编码为ISO-8859-1,而我们需要使用UTF-8。不然getForObject得到的数据中文乱码,或者postForObject发送的数据乱码。二、数据转换Map是因为微信接口文档虽说返回的是 Json 数据,但是同时返回的 Header 里面的 Content-Type 值确是 text/plain 的!!对于RestTemple默认可以转换的...
RestTemplate 添加请求头headers和请求体body
        //headers HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders.add(&quot;api-version&quot;, &quot;1.0&quot;); //body MultiValueMap&amp;lt;String, String&amp;gt; requestBody = new...
restTemplate做api网关接受微服务的接口
/** * 创建产品 * @param product * @return */ @PostMapping(&quot;/add&quot;) @ResponseBody public ResponseData createProduct(@RequestBody ProductVo product) { logger.info(&quot;创建产品&quot;...
RestTemplate中文乱码解决
RestTemplate是Spring提供的一个模板类,它对HTTP请求作了一层封装,使得我们发送HTTP请求时,无需再编写繁琐的代码。代码是变少了,但是对于刚接触这个类的人来说,遇到问题了,就难免要花点时间去研究下了。最近在使用时,就遇到了中文乱码问题,查看了不少网上资料,但是都没有深入讲解,最后在自己一步一步调试过程中,搞明白了这个过程,最终解决了乱码问题。 Bean配置: 配置删减了...
Spring中使用RestTemplate调用第三方接口API
Spring中使用RestTemplate调用第三方接口API 将其json内容转换为程序中需要的对象
RestTemplate上传文件总结
最近做了一个功能,需要使用RestTemplate来上传文件,试了好多的方法,网上也看了很多的资料,最后发现,有很多的东西是没有必要的,除了吧脑袋搞的懵懵的,其实总结下来,只需要很简单的几部就可以了,当然也不排除别人上传时的服务端的差异,可能是需求不一样,不保证这种方法万能,但是一些简单的上传还是能实现功能的,下面就直接给大家上代码吧。 public List uploadFile(Mult
RestTemplate远程接口调用
spring rest mvc使用RestTemplate远程接口调用 主要代码如下:  import java.util.HashMap;  import java.util.Map;  import org.springframework.web.client.RestTemplate;  /**  * RestTemplate提供了一系列调用spring mv
Spring的WebServiceTemplate访问WebService的方法及其本质原理
WebService客户端调用的本质就是将SAOP格式的XML通过通信协议发送到WebService的服务器端,然后接收服务器端返回的XML. 本文简单介绍一下如何通过Spring提供的WebServiceTemplate访问Webservice,WebServiceTemplate与调用webservice的客户端已及webservice服务器端示意图如下(图片来源于Spring in Act
基于AsyncRestTemplate异步HTTP请求的一种轻量级技术实现
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/51428562Ⅰ、前言          在上一篇博客中讲述ListenableFuture通过异步回调机制来实现请求的非阻塞。通常情况下,客户端获取数据并不会只发送一次http请求,可能会有多个http请求。这样,使用上一篇博客中的方法,就会产生大量的冗余代码
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问