`

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...

相关推荐

    springmvc关于@requestMapping和@requestParam的使用

    1. **基本用法**:将`@RequestParam` 注解应用于方法参数,如`@RequestParam("name") String userName`,表示从请求中获取名为"name"的参数并将其值赋给变量`userName`。 2. **默认值**:可以为`@RequestParam` ...

    SpringMVC注解@RequestParam方法原理解析

    SpringMVC注解@RequestParam方法原理解析 @RequestParam是SpringMVC中一个非常重要的注解,用于接收来自前端的参数值。下面我们将对@RequestParam方法原理解析进行详细的介绍。 一、作用 @RequestParam可以作用在...

    对SpringMVC的@RequestParam的解释

    在Spring MVC框架中,`@RequestParam` 是一个用于从HTTP请求中绑定参数到控制器方法参数的注解。本文将深入解析`@RequestParam`的工作原理及其关键特性。 首先,`@RequestParam` 包含四个主要参数: 1. `String ...

    SpringMVC@RequestMapping(重点)@RequestParam@PathVariable示例

    这里的`@RequestParam`注解将从请求中提取名为"username"和"password"的参数,并将其值分别赋给`username`和`password`变量。 ### 3. `@PathVariable` `@PathVariable`注解用于从URL模板中获取值并将其绑定到方法...

    SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型

    SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型 SpringMvc 框架中的 @RequestParam 注解是一种常用的参数注解,用于将 HTTP 请求参数绑定到方法参数上。该注解提供了多种参数类型的支持,包括基本数据...

    springmvc:@Controller @RequestMapping @RequestParam,模型和ModelAndView Spring MVC实践

    在Spring MVC框架中,`@Controller`、`@RequestMapping`、`@RequestParam`以及`ModelAndView`是四个关键的注解,它们对于构建基于Java的Web应用程序至关重要。下面将详细介绍这些概念及其在实际开发中的应用。 `@...

    SpringMVC解决GET请求时中文乱码的问题.rar

    2. 使用`@RequestParam`注解:在Controller方法中,通过`@RequestParam`注解接收参数时,可以设置`@RequestParam(value = "param", required = false, encoding = "UTF-8")`,明确指定编码为UTF-8。 3. 自定义拦截...

    springMVC解决中文乱码

    解决 SpringMVC 中的中文乱码问题可以通过多种方法来实现,包括在 web.xml 文件中配置字符编码、使用注解配置字符编码、使用 CharacterEncodingFilter 或者自定义 Filter 等。这些方法都可以有效地解决中文乱码问题...

    SpringMVC注解

    为了解决上述问题,可以在`@RequestParam`中加入`required=false`属性,允许该参数未被传递时返回默认值(例如`null`)。 **示例**: ```java @RequestMapping("testRequestParam") public String filesUpload(@...

    springmvc之@RequestMapping的demo

    4. **参数绑定**:`@RequestParam`可以用来从请求参数中获取值,如: ```java @GetMapping("/greeting") public String greeting(@RequestParam("name") String name) { return "Hello, " + name; } ``` 这个...

    SpringMVC Tomcat控制台乱码问题解决方案

    SpringMVC Tomcat控制台乱码问题解决方案 本文主要介绍了SpringMVC Tomcat控制台乱码问题解决方案,该解决...使用该解决方案可以解决SpringMVC框架中出现的乱码问题,对大家的学习或者工作具有一定的参考学习价值。

    Http请求传参SpringMVC接收参数详细解析

    本文将深入解析SpringMVC如何处理GET和POST请求中的参数,以及如何使用@RequestParam和@RequestBody注解。 1. GET请求 GET请求通常用于获取资源,其参数直接附加在URL路径后面,以键值对的形式存在。例如,`/api/...

    SpringMVC参数收集及乱码处理.docx

    在 SpringMVC 中,我们可以使用 @RequestParam 注解来注入请求参数。例如: ```java @Controller public class MyController { @RequestMapping("/login") public String login(@RequestParam("username") String...

    详解SpringMVC注解@initbinder解决类型转换问题

    SpringMVC 注解 @InitBinder 解决类型转换问题 在使用 SpringMVC 框架时...使用 @InitBinder 注解和 WebDataBinder 类可以解决 SpringMVC 中的类型转换问题,并提供了灵活的自定义编辑器机制,以满足不同的业务需求。

    03.SpringMVC中如何解决POST请求中文乱码问题GET的又如何处理呢.zip

    总结,解决Spring MVC中的POST和GET请求中文乱码问题,关键在于确保整个系统从客户端到服务器端的字符编码一致性,包括过滤器、控制器参数、表单提交以及服务器配置等。遵循以上步骤,可以有效避免中文乱码的出现。...

    02_springmvc传值

    在控制器方法中,可以使用`@RequestParam`注解来接收这些参数。 - POST方式:表单提交或JSON数据,使用`@RequestParam`或`@RequestBody`注解。`@RequestParam`用于接收表单字段,而`@RequestBody`用于解析请求体中...

    SpringMVC的@InitBinder参数转换代码实例

    @InitBinder是一个SpringMVC框架中的注解,用于初始化WebDataBinder对象,WebDataBinder对象是SpringMVC中用于绑定请求参数到命令对象的关键对象。@InitBinder注解可以指定要绑定的参数,并注册自定义的编辑器,用于...

    springMVC框架

    SpringMVC是Spring框架的一部分,它是一个模型-视图-控制器(MVC)架构的Web应用开发框架。...在实际项目中,SpringMVC通常与其他Spring组件如Spring Boot、Spring Data JPA等结合使用,提供一站式的解决方案。

    SpringMVC中解决@ResponseBody注解返回中文乱码问题

    本文将详细介绍如何解决SpringMVC中`@ResponseBody`注解返回中文乱码的问题。 首先,我们可以尝试使用`@RequestMapping`注解的`produces`属性来指定响应内容的MIME类型和字符集。例如: ```java @RequestMapping...

    SpringMVC接收请求参数所有方式总结

    使用`@RequestParam`注解配合多值特性,例如`@RequestParam("items") String[] items`或`@RequestParam("items") List&lt;String&gt; items`。 6. JSON参数: 当前端发送JSON格式的数据时,可以使用`@RequestBody`注解...

Global site tag (gtag.js) - Google Analytics