【Spring】Spring MVC Controller 参数中文乱码

本文详细介绍了在Spring MVC框架下,当接收到的POST参数为中文时,由于默认编码设置导致显示乱码的问题。通过提供三种解决方案,其中第三种方法最为简便有效,只需在Controller层调用`request.setCharacterEncoding(UTF-8)`即可实现参数正确解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

在Controller中接收到的POST参数如果是中文的话,显示为乱码。已知客户端传过来时编码为UTF-8。


问题产生分析:

Spring MVC中默认的编码格式为“ISO-8859-1”,因此造成乱码。


解决方案:

所有的解决方案都是将编码转为UTF-8,至于方式,这里总结了3种,很明显第三种最好用。

①Controller传入参数为的HttpServletRequest类,获取到request,并调用

request.setCharacterEncoding("UTF-8");

来获取到UTF8格式的request,然后在取出参数就是正确的中文了。

举个栗子:

 @RequestMapping("/login")
 public @ResponseBody ResponseEntity<LoginInfo> login(HttpServletRequest request) {
        LoginInfo li=new LoginInfo();
        try {
        request.setCharacterEncoding("UTF-8");
        String nameString  = request.getParameter("screen_name");
        System.out.println(nameString);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            return new ResponseEntity<LoginInfo>(li, HttpStatus.OK);
        }
    }

②仍然是使用@RequestParam获取参数,然后调用

str= new String(str.getBytes("ISO-8859-1"),"UTF-8");
注意处理异常。

以上两种方法都必须在每一个Controller函数中调用,太过麻烦。有没有一种全局配置方式,让参数能自动转为UTF-8呢?其实SpringMVC早就设计好了,在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>

好啦,至此问题就完美解决了。

需要注意,三种方法使用一个即可,使用两个的话,转两次又成乱码了。




### Spring MVC中注解传参乱码解决方案 在Spring MVC框架中,当使用注解方式传递参数时,可能会遇到中文乱码问题。这通常是由于字符编码不一致导致的。以下是一些常见的解决方案: #### 1. 配置前端请求的字符集 确保前端发送请求时,指定正确的字符集为UTF-8。例如,在HTML表单中可以通过`<form>`标签的`accept-charset`属性设置字符集[^3]: ```html <form action="/submit" method="post" accept-charset="UTF-8"> <input type="text" name="username" /> <button type="submit">Submit</button> </form> ``` #### 2. 配置服务器端的过滤器Spring MVC中,可以配置`CharacterEncodingFilter`过滤器来统一设置请求和响应的字符编码为UTF-8。通过在`web.xml`或Spring配置类中添加该过滤器,可以有效解决乱码问题。 在`web.xml`中配置示例: ```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> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 如果使用Java配置类,则可以通过如下代码实现: ```java @Bean public FilterRegistrationBean<CharacterEncodingFilter> characterEncodingFilter() { FilterRegistrationBean<CharacterEncodingFilter> registrationBean = new FilterRegistrationBean<>(); CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); registrationBean.setFilter(filter); registrationBean.addUrlPatterns("/*"); return registrationBean; } ``` #### 3. 配置消息转换器 在Spring MVC中,前后端数据交互通常通过JSON格式进行。为了确保JSON数据的正确编码,可以在`springmvc.xml`中配置`HttpMessageConverter`,将默认的ISO-8859-1字符集改为UTF-8[^1]。 配置示例: ```xml <mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"/> </bean> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="writeDatesAsTimestamps" value="false"/> </bean> </property> </bean> </mvc:message-converters> </mvc:annotation-driven> ``` #### 4. 使用注解解决特定场景乱码 对于某些特定场景,如GET请求中的URL参数乱码,可以通过在Controller方法中使用`@RequestMapping`或其他组合注解(如`@GetMapping`、`@PostMapping`等)来处理[^2]。例如: ```java @PostMapping(value = "/example", consumes = "application/json;charset=UTF-8", produces = "application/json;charset=UTF-8") @ResponseBody public ResponseEntity<String> example(@RequestBody User user) { return ResponseEntity.ok("Received: " + user.getName()); } ``` #### 5. 数据库层面的字符集配置 如果乱码问题出现在数据库操作中,需要检查数据库的字符集是否为UTF-8。确保数据库、表以及字段的字符集均设置为UTF-8,并在连接字符串中明确指定字符集。 ### 总结 通过以上方法,可以从多个层面解决Spring MVC中注解传参的乱码问题。核心思想是确保整个流程中字符集的一致性,从前端到后端再到数据库,都应统一使用UTF-8编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值