`

Springmvc中@RequestParam传值中文乱码解决方案

阅读更多
首先jsp表单里面有一些参数要传到controller中,通过以下方法接收:
@RequestMapping(value="/orderPaper")
	public ModelAndView orderPaper( 
			@RequestParam("paperName")String paperName,
			@RequestParam("openStartTime")String openStartTime, 
			@RequestParam("openEndTime")String openEndTime ) {
		ModelAndView mv = new ModelAndView();
mv.addObject("paperName", paperName);    //这里面传过来的是中文,接收到的是一堆笑得很开心的的乱码
		mv.setViewName("/college/orderPaper");
		return mv;
	}

怎么处理呢?通过下面的工具类:
public class EncodingTool {
	public static String encodeStr(String str) {
		try {
			return new String(str.getBytes("ISO-8859-1"), "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}
}

这样,只要把controller中改为
mv.addObject("paperName",EncodingTool.encodeStr(paperName)); 


在网上有的说还需要在web.xml里面配置:
<!-- 字符过滤器 -->
  <filter>
  	<filter-name>encodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>UTF-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>encodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

我试过,其实不配置也能把爱笑的乱码解决!
1
12
分享到:
评论
14 楼 is_zhoufeng 2015-01-30  
   范德萨
13 楼 cnhome 2014-01-14  
web.xml的配置方法是对的,再不然就是写在程序里

http://blog.csdn.net/cnhome/article/details/18268865
12 楼 undancer 2013-05-15  
luanxiyuan 写道
undancer 写道
URL上出现乱码一般是tomcat不支持导致的,这时候应该是修改tomcat配置使其URL支持UTF-8。硬编码的方式完全没必要,并且非常不理想。

tomcat配置文件里面除了web.xml是ISO-8859-1,其余的都是utf-8,但是我把他改为utf-8依旧不好用,所以我觉得跟tomcat可能没有关系。


tomcat的server.xml文件,Connector标签增加useBodyEncodingForURI="true"属性即可。

还有你说的是改什么????表示没能理解。
11 楼 luanxiyuan 2013-04-19  
suyulin6688 写道
luanxiyuan 写道
suyulin6688 写道
(1)@RequestParam 注解,基本可以省略。
(2)spring mvc 到了 3.2 时代了,你还在直接使用 ModelAndView?
(3)建议把方法  public ModelAndView orderPaper(...)  改为  public String orderPaper(..., ModelMap modelMap)

说的有道理:使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。
我想请教如果不用@RequestParam 注解,还有什么更好的办法?能举例说明一下吗?

省略 冗长的 @RequestParam 注解,把方法改为(看起来精简一些):

public String orderPaper(  
            String paperName, 
            String openStartTime,  
            String openEndTime, ModelMap modelMap) {}


如果你的某个 VO(值对象)里面包含 paperName,openStartTime,openEndTime 这三个属性,以及相应的 getter 和 setter 方法,
可以把方法改为(看起来精简多了):
public String orderPaper(MyVo myVo, ModelMap modelMap) {}


建议看看这篇好文章:
主题:浅谈 SpringMVC 数据绑定
http://www.iteye.com/topic/973918

谢谢,你的讲解多我很受用,祝好!
10 楼 suyulin6688 2013-04-19  
luanxiyuan 写道
suyulin6688 写道
(1)@RequestParam 注解,基本可以省略。
(2)spring mvc 到了 3.2 时代了,你还在直接使用 ModelAndView?
(3)建议把方法  public ModelAndView orderPaper(...)  改为  public String orderPaper(..., ModelMap modelMap)

说的有道理:使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。
我想请教如果不用@RequestParam 注解,还有什么更好的办法?能举例说明一下吗?

省略 冗长的 @RequestParam 注解,把方法改为(看起来精简一些):

public String orderPaper(  
            String paperName, 
            String openStartTime,  
            String openEndTime, ModelMap modelMap) {}


如果你的某个 VO(值对象)里面包含 paperName,openStartTime,openEndTime 这三个属性,以及相应的 getter 和 setter 方法,
可以把方法改为(看起来精简多了):
public String orderPaper(MyVo myVo, ModelMap modelMap) {}


建议看看这篇好文章:
主题:浅谈 SpringMVC 数据绑定
http://www.iteye.com/topic/973918
9 楼 luanxiyuan 2013-04-19  
blackstreet 写道
我怎么没碰到,我试过,不做任何改动,没有乱码
如果有乱码,可以如下

@RequestMapping(method=RequestMethod.GET, produces="text/plain;charset=UTF-8")


<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
   
    <!-- 要放在最后 -->
<mvc:annotation-driven/> 


我的RP不行吧,就遇到了问题。你把整个配置文件都粘过来了,小弟初学没多久,无法提取有用信息啊。。。
8 楼 luanxiyuan 2013-04-19  
suyulin6688 写道
(1)@RequestParam 注解,基本可以省略。
(2)spring mvc 到了 3.2 时代了,你还在直接使用 ModelAndView?
(3)建议把方法  public ModelAndView orderPaper(...)  改为  public String orderPaper(..., ModelMap modelMap)

说的有道理:使用 String 作为请求处理方法的返回值类型是比较通用的方法,这样返回的逻辑视图名不会和请求 URL 绑定,具有很大的灵活性,而模型数据又可以通过 ModelMap 控制。
我想请教如果不用@RequestParam 注解,还有什么更好的办法?能举例说明一下吗?
7 楼 luanxiyuan 2013-04-19  
undancer 写道
URL上出现乱码一般是tomcat不支持导致的,这时候应该是修改tomcat配置使其URL支持UTF-8。硬编码的方式完全没必要,并且非常不理想。

tomcat配置文件里面除了web.xml是ISO-8859-1,其余的都是utf-8,但是我把他改为utf-8依旧不好用,所以我觉得跟tomcat可能没有关系。
6 楼 suyulin6688 2013-04-19  
(1)@RequestParam 注解,基本可以省略。
(2)spring mvc 到了 3.2 时代了,你还在直接使用 ModelAndView?
(3)建议把方法  public ModelAndView orderPaper(...)  改为  public String orderPaper(..., ModelMap modelMap)
5 楼 undancer 2013-04-19  
URL上出现乱码一般是tomcat不支持导致的,这时候应该是修改tomcat配置使其URL支持UTF-8。硬编码的方式完全没必要,并且非常不理想。
4 楼 blackstreet 2013-04-18  
我怎么没碰到,我试过,不做任何改动,没有乱码
如果有乱码,可以如下

@RequestMapping(method=RequestMethod.GET, produces="text/plain;charset=UTF-8")


<bean id="requestMappingHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
   
    <!-- 要放在最后 -->
<mvc:annotation-driven/> 

3 楼 yb1682003 2013-04-18  
这种硬编码不理想,应该去找另一种
2 楼 luanxiyuan 2013-04-18  
steafler 写道
It'd better to use the second way...

但是如果不用第一种,只用第二种是不行的。
1 楼 steafler 2013-04-18  
It'd better to use the second way...

相关推荐

Global site tag (gtag.js) - Google Analytics