我是靠谱客的博主 高贵银耳汤,这篇文章主要介绍SpringMVC02_数据绑定&中文乱码处理,现在分享给大家,希望可以做个参考。

SpringMVC02_数据绑定&中文乱码处理


  • 示例1:
    通过 @RequestParam 注解将请求参数中的属性绑定至方法的形参(由HandlerAdapter来完成)
复制代码
1
2
3
4
5
6
7
8
@RequestMapping(value = "/index",method = RequestMethod.GET,params = {"name","id=10"}) public String index(@RequestParam("name") String str,@RequestParam("id") int age){ System.out.println(str); System.out.println(age); System.out.println("执行了index..."); return "index"; }
  • 示例2:

传统请求url:http://localhost:8080/hello/index?name=zhangsan&id=10
REST风格的请求url:http://localhost:8080/hello/index/zhangsan/10
通过 @PathVariable 注解完成REST风格的请求参数与形参的映射

复制代码
1
2
3
4
5
6
7
@RequestMapping("/rest/{name}/{id}") public String rest(@PathVariable("name") String name,@PathVariable("id") int id){ System.out.println(name); System.out.println(id); return "index"; }
  • 示例3:
    通过 @CookieValue 注解获取Cookie值
复制代码
1
2
3
4
5
6
@RequestMapping("/cookie") public String cookie(@CookieValue(value = "JSESSIONID") String sessionId){ System.out.println(sessionId); return "index"; }
  • 示例4:
    SpringMVC会根据请求参数名和JavaBean属性名进行自动匹配,自动为对象填充属性值。

Address实体类:

复制代码
1
2
3
4
5
6
7
8
package com.blu.entity; import lombok.Data; @Data public class Address { private String value; }

User实体类:

复制代码
1
2
3
4
5
6
7
8
9
10
package com.blu.entity; import lombok.Data; @Data public class User { private long id; private String name; private Address address; }

register.jsp页面:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="/save" method="post"> 用户id:<input type="text" name="id"/><br/> 用户名:<input type="text" name="name"/><br/> <input type="text" name="address.value"/><br/> <input type="submit" value="注册"/> </form> </body> </html>

Handler方法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("/register") public String Login() { return "login"; } @RequestMapping(value = "/save", method = RequestMethod.POST) public String save(User user) { System.out.println(user); return "register"; }

输入url进入register页面
在这里插入图片描述
输入值提交:
在这里插入图片描述
控制台打印结果出现中文乱码:

复制代码
1
2
User(id=1, name=BLU, address=Address(value=?±?è????????))

解决方法:
修改web.xml,添加处理中文乱码的过滤器:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <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> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>

重启运行,输入中文值提交,控制台收到了正确的中文值:

复制代码
1
2
User(id=1, name=BLU, address=Address(value=江苏南京))

注:该过滤器解决了前端发送给后端的中文乱码问题
而SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,也会出现中文乱码

示例:

复制代码
1
2
3
4
5
6
@ResponseBody @RequestMapping("/hello") public String hello() { return "你好!BLU"; }

在这里插入图片描述
解决办法1:
只要在springmvc.xml配置文件中添加如下配置即可:

复制代码
1
2
3
4
5
6
7
8
9
<mvc:annotation-driven> <!-- 消息转换器(所谓的消息就是指后台返回给前端的数据) --> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8" /> </bean> </mvc:message-converters> </mvc:annotation-driven>

重试结果:
在这里插入图片描述
解决办法2:
@RequestMapping 注解中添加属性:produces = "text/html;charset=UTF-8"

复制代码
1
2
3
4
5
6
@ResponseBody @RequestMapping(value= "/hello2", produces = "text/html;charset=UTF-8") public String hello() { return "你好!BLU"; }

最后

以上就是高贵银耳汤最近收集整理的关于SpringMVC02_数据绑定&中文乱码处理的全部内容,更多相关SpringMVC02_数据绑定&中文乱码处理内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部