概述
SpringMVC02_数据绑定&中文乱码处理
- 示例1:
通过 @RequestParam 注解将请求参数中的属性绑定至方法的形参(由HandlerAdapter来完成)
@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风格的请求参数与形参的映射
@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值
@RequestMapping("/cookie")
public String cookie(@CookieValue(value = "JSESSIONID") String sessionId){
System.out.println(sessionId);
return "index";
}
- 示例4:
SpringMVC会根据请求参数名和JavaBean属性名进行自动匹配,自动为对象填充属性值。
Address实体类:
package com.blu.entity;
import lombok.Data;
@Data
public class Address {
private String value;
}
User实体类:
package com.blu.entity;
import lombok.Data;
@Data
public class User {
private long id;
private String name;
private Address address;
}
register.jsp页面:
<%@ 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方法:
@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页面
输入值提交:
控制台打印结果出现中文乱码:
User(id=1, name=BLU, address=Address(value=?±?è????????))
解决方法:
修改web.xml,添加处理中文乱码的过滤器:
<!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>
重启运行,输入中文值提交,控制台收到了正确的中文值:
User(id=1, name=BLU, address=Address(value=江苏南京))
注:该过滤器解决了前端发送给后端的中文乱码问题
而SpringMVC的@ResponseBody注解可以将请求方法返回的对象直接转换成JSON对象,但是当返回值是String的时候,也会出现中文乱码
示例:
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "你好!BLU";
}
解决办法1:
只要在springmvc.xml配置文件中添加如下配置即可:
<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"
@ResponseBody
@RequestMapping(value= "/hello2", produces = "text/html;charset=UTF-8")
public String hello() {
return "你好!BLU";
}
最后
以上就是高贵银耳汤为你收集整理的SpringMVC02_数据绑定&中文乱码处理的全部内容,希望文章能够帮你解决SpringMVC02_数据绑定&中文乱码处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复