restTemplate使用及中文乱码问题
2016-09-17 18:24
731 查看
restTemplate是spring提供的一个发送http请求的工具,我们知道spring里面有httpclient实现http请求,但是httpclient的使用相对繁琐,restTemplate使用就方便多了,而且restTemplate能将返回结果自动映射到bean中,不需要我们自己处理。不过在使用的时候遇到了中文乱码问题,我们知道http发送post请求时是以表单方式提交请求参数,而restTemplate中表单内string的编码方式默认是ISO-8859-1编码,可以查看StringHttpMessageConverter的源码,不过FormHttpMessageConverter是默认utf-8编码,这就意味着我们向表单中添加String类型参数时便会遇到中文乱码。我这里提供的是不需要改配置文件,使用代码解决中文问题的方法,包括对restTemplate的一个封装,
所要注意的是get请求要求我们对URL中参数用占位符封装,user/getUser?userId={userId}&fe=
{fe},就像这样,所以我在封装get请求时有一个拼接URL的操作。
public <T> T restTemplate(String url, Map<String,T> params, Class<T> var, HttpMethod method) { 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); restTemplate.getMessageConverters().addAll(Arrays.asList(fc, new MappingJackson2HttpMessageConverter())); MultiValueMap<String, T> map = new LinkedMultiValueMap<>(); map.setAll(params); switch (method) { case POST: return restTemplate.postForObject(url, map, var); case GET: String getParams = "?" + map.keySet().stream().map(k -> String.format("%s={%s}", k, k)).collect(Collectors.joining("&")); return restTemplate.getForObject(url + getParams, var, params); default: return restTemplate.postForObject(url, map, var); } }
所要注意的是get请求要求我们对URL中参数用占位符封装,user/getUser?userId={userId}&fe=
{fe},就像这样,所以我在封装get请求时有一个拼接URL的操作。
相关文章推荐
- 解决spring3.0.5使用RestTemplate发送post请求响应中文乱码问题
- RestTemplate发送中文参数乱码问题
- RestTemplate中文乱码问题
- 通过springRestTemplate发送中文乱码问题
- 关于spring中使用redis中文乱码问题(redistemplate)
- 关于在MySQL 、 VC、 JSP 中使用UTF-8解决中文生僻字乱码的问题
- jsp中使用mysql中文乱码的问题。
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- 彻底解决使用Doxygen 1.5.6自动生成的chm文件导航栏中文乱码问题
- sl3中的DataGrid中的数据导出到Excel中 使用csv格式 解决中文是乱码的问题
- Ajax使用POST提交中文乱码问题(转)
- 解决使用nvelocity时候template文件里面包含中文输出结果时候出现乱码的问题
- 使用TIdHTTP获取网页的中文乱码问题
- jsp使用URL编码传递中文参数问题※※jsp传递中文参数乱码问题
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- java adf 使用ajax传递参数中有中文乱码问题(转)
- Ajax使用POST提交中文乱码问题
- jsp使用URL编码传递中文参数乱码问题
- 使用showModalDialog出现中文乱码问题
- Spring mvc 实例--使用velocity视图,解决中文乱码问题