数据绑定在后端的业务方法中直接获取客户端 HTTP 请求中的参数将请求参数映射到业务方法的形参中 Spring MVC 中数据绑定的工作是由 HandlerAdapter 来完成的。
- 基本数据类型
package org.westos.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;/*** author lwj* date 2020/12/19 16:44*/ControllerRequestMapping("/data")public class DataBindHandler {ResponseBodyRequestMapping("/baseType")public String baseType(int id) {return id "";}}
ResponseBody表示 Spring MVC 会直接将业务方法的返回值响应给客户端如果不加 ResponseBody 注解Spring MVC 会将业务方法的返回值传递给 DispatcherServlet再由 DispatcherServlet 调用 ViewResolver 对返回值进行解析映射到一个 JSP 资源。
http://localhost:8080/data/baseType?id1
缺陷基本数据类型不能接收Null值。
- 包装类
ResponseBodyRequestMapping("/packageType")public String packageType(RequestParam(value "num", required false, defaultValue "0") Integer id) {return id "";}
包装类可以接收 null 当 HTTP 请求没有参数时使用包装类定义形参的数据类型程序不会抛出异常。响应客户端null
RequestParam
value “num”将 HTTP 请求中名为 num 的参数赋给形参 id。
required设置 num 是否为必填项true 表示必填false 表示非必填可省略。
defaultValue “0”如果 HTTP 请求中没有 num 参数默认值为0。
http://localhost:8080/data/packageType
客户端显示0。
http://localhost:8080/data/packageType?num10
客户端显示10。
- 数组
RestControllerRequestMapping("/data")public class DataBindHandler {RequestMapping("/array")public String array(String[] num) {String str Arrays.toString(num);return str;}}
RestController 表示该控制器会直接将业务方法的返回值响应给客户端不进行视图解析。
Controller 表示该控制器的每一个业务方法的返回值都会交给视图解析器进行解析如果只需要将数据响应给客户端而不需要进行视图解析则需要在对应的业务方法定义处添加 ResponseBody 。
http://localhost:8080/data/array?num123
等同于
ControllerRequestMapping("/data")public class DataBindHandler {RequestMapping("/array")ResponseBodypublic String array(String[] num) {String str Arrays.toString(num);return str;}}
- List
Spring MVC 不支持 List 类型的直接转换需要对 List 集合进行包装。
集合封装类
Datapublic class UserList {private List users;}
JSP
用户1编号姓名地址 用户2编号姓名地址
业务方法
RestControllerRequestMapping("/data")public class DataBindHandler {RequestMapping("/list")public String list(UserList userList) {StringBuilder str new StringBuilder();for (User user : userList.getUsers()) {System.out.println(user);str.append(user);}return str.toString();}}
此时从前台到后台的数据绑定是没有问题的。但是从后台向前台传递时出现了中文乱码问题。
处理 ResponseBody 的中文乱码在 springmvc.xml 中配置消息转换器。
- Map
自定义封装类
Datapublic class UserMap {private Map users;}
业务方法
RestControllerRequestMapping("/data")public class DataBindHandler {RequestMapping("/map")public String map(UserMap userMap) {StringBuilder str new StringBuilder();for (String s : userMap.getUsers().keySet()) {User user userMap.getUsers().get(s);str.append(user);}return str.toString();}}
JSP
用户1编号姓名地址 用户2编号姓名地址
- JSON
客户端发送 JSON 格式的数据直接通过 Spring MVC 绑定到业务方法的形参中。
处理 Spring MVC 无法加载静态资源在 web.xml 中添加配置即可。
default*.js
JSP
上面代码中最重要的是contentType属性。
业务方法
RestControllerRequestMapping("/data")public class DataBindHandler {RequestMapping("/json")public User user(RequestBody User user) {System.out.println(user);user.setId(2);user.setName("李四");return user;}}
Spring MVC 中的 JSON 和 JavaBean 的转换需要借助于 fastjsonpo.xml中引入相关依赖。
com.alibabafastjson1.2.73
springmvc.xml 添加 fastjson 配置。
【文章转自韩国多IP服务器 http://www.558idc.com/krzq.html 复制请保留原URL】