Spring MVC Controller中解析GET方式的中文参数会乱码的问题

Spring MVC Controller中解析GET方式的中文参数会乱码的问题

问题描述

在工作上使用Spring老是碰到一个问题,使用Controller处理GET方式的请求参数时,服务端得到的结果会碰到乱码,之前翻阅了很多与Java EE相关的很多乱码处理资料,不管是加过滤器还是统一文件编码,都没能正确解决,后来设计接口时,一直采用先Base64,然后再作为参数传过来的方式解决的。最近找到了根本的解决方案,顺手记下来。

为何会乱码

Spring MVC 是基于Servlet,在Http请求到达Servlet解析之前,GET过来的URL已经被Tomcat先做了一次URLDecode。Tomcat对GET方式默认的URL解码结果是iso-8859-1而不是我认为的UTF-8(很奇怪为啥会这么干,开源项目不都是喜欢默认UTF-8的么)。

解决方案

解决方案也很简单,除了平常在项目中web.xml里配置的转码filter,jsp跟代码文件统一编码外,最关键的一点就是在Tomcat的conf目录下的server.xml中配置 Connector的URIEconding=“UTF-8"属性即可。
官方文档中对这个属性的说明:

URIEncoding :This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.

这里参考文档是Tomcat5.5的,亲测对Tomcat7也管用。

参考

  1. Tomcat官网文档:http://tomcat.apache.org/tomcat-5.5-doc/config/http.html
  2. CSDN上的一篇博文:http://blog.csdn.net/chenyongsuda/article/details/5393458
时间: 03-14

Spring MVC Controller中解析GET方式的中文参数会乱码的问题的相关文章

Spring MVC Controller中解析GET方式的中文参数会乱码的问题(tomcat如何解码)

Spring MVC Controller中解析GET方式的中文参数会乱码的问题 问题描述 在工作上使用突然出现从get获取中文参数乱码(新装机器,tomcat重新下载和配置),查了半天终于找到解决办法. 为何会乱码 Spring MVC 是基于Servlet,在Http请求到达Servlet解析之前,GET过来的URL已经被Tomcat先做了一次URLDecode.Tomcat对GET方式默认的URL解码结果是iso-8859-1而不是我认为的UTF-8. 解决方案 解决方案也很简单,除了平常

spring mvc controller中获取request head内容

spring mvc controller中获取request head内容: @RequestMapping("/{mlid}/{ptn}/{name}") public String print(@PathVariable Integer mlid, @PathVariable String ptn, @PathVariable String name, HttpSession session, Model model, @RequestHeader String referer,

Spring Mvc——Controller中常规方法示例

一,简单无参数地址访问 首先来看下类标记: /** * Created by LiuHuiChao on 2016/3/21. */ @Controller @RequestMapping("/hello") public class HelloMvcController { 简单进行类中方法的访问: /*简单访问示例*/ @RequestMapping("/mvc") public String helloMvc() { return "home&quo

spring mvc Controller中使用@Value无法获取属性值

在使用spring mvc时,实际上是两个spring容器: 1,dispatcher-servlet.xml 是一个,我们的controller就在这里,所以这个里面也需要注入属性文件 org.springframework.web.servlet.DispatcherServlet 这里最终是使用WebApplicationContext parent =WebApplicationContextUtils.getWebApplicationContext(getServletContext

spring mvc controller中的异常封装

http://abc08010051.iteye.com/blog/2031992 一直以来都在用spring mvc做mvc框架,我使用的不是基于注解的,还是使用的基于xml的,在controller里一般都会加上一个异常捕捉,能分析出来的异常,提示出具体信息,不能预料的异常,返回一个统一的异常提示信息,未封装前的代码为: Java代码   public ModelAndView addBigDeal(HttpServletRequest request, HttpServletRespons

spring mvc controller中方法 为基本类型 且调用时传入了null 报如下错误

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Optional int parameter 'type' is present but cannot be translated into a null value due to being declared as a primit

Spring MVC之视图解析器

Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多种视图. Spring处理视图最重要的两个接口是ViewResolver和View.ViewResolver接口在视图名称和真正的视图之间提供映射关系: 而View接口则处理请求将真正的视图呈现给用户. 1.ViewResolver视图解析器 在Spring MVC控制器中,所有的请求处理方法(Ac

spring mvc返回json字符串的方式

spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring-servlet.xml文件中配置如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&quo

spring mvc源码解析

1.从DispatcherServlet开始     与很多使用广泛的MVC框架一样,SpringMVC使用的是FrontController模式,所有的设计都围绕DispatcherServlet 为中心来展开的.见下图,所有请求从DispatcherServlet进入,DispatcherServlet根据配置好的映射策略确定处理的 Controller,Controller处理完成返回ModelAndView,DispatcherServlet根据配置好的视图策略确定处理的 View,由V