接下来学习SpringMVC的数据绑定,本篇主要介绍SpringMVC数据绑定的原理及如何使用。那么什么是数据绑定呢?如果之前学过Vue等框架时,就应该不陌生了,但是可能此处的效果和Vue中的有些区别。此处的数据绑定是指:将Http请求中的参数绑定到Handler业务方法中作为参数。
在没有接触SpringMVC之前,你还会发现servlet中的doGet或者doPost方法中都会有httpRequest和httpResponse,同时由于从request中获取的数据类型都是String类型,因此如果需要获取Integer类型,还需要进一步的转换。遇到前台form表单的时候,需要借助于request.getParameter("name属性值")
来逐一获取信息,然后在业务方法中将这些参数封装成一个对象,其实这个过程挺复杂的。
在入门章节里面就说明使用SpringMVC,只需在业务方法中定义对应的形参即可(如需要获取Integer类型的Id,只需在形参中定义Integer类型的Id即可),SpringMVC会自动将httpRequest请求中的参数取出来并绑定到业务方法的形参当中。
SpringMVC数据绑定流程原理 SpringMVC常用的数据绑定类型 SpringMVC常用的数据绑定类型包括:基本数据类型、包装类、数组、对象、集合(List/Set/Map)以及JSON。接下来通过代码的方式分别介绍各种数据类型应当如何绑定,使用Maven新建一个webapp项目,名称为springmvc_databind
。第一步,配置pom.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 <dependencies> <!--springmvc相关--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.9.RELEASE</version> </dependency> <!--servlet相关--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <!--jstl标签库--> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!--Junit测试--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
第二步,配置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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 <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> <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> <!--让SpringMVC放开css访问控制,设置访问静态资源--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <!--让SpringMVC放开js访问控制,设置访问静态资源--> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <!--所有的请求都会被SpringMVC进行拦截--> <servlet> <servlet-name>SpringMVC</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置SpringMVC文件所在的位置--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
第三步,配置springmvc.xml文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--开启包自动扫描--> <context:component-scan base-package="com.envy"></context:component-scan> <!--配置视图解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--配置前缀--> <property name="prefix" value="/"></property> <!--配置后缀--> <property name="suffix" value=".jsp"></property> </bean> </beans>
第四步,新建对应的文件夹,如图所示:
基本数据类型 基本数据类型以int类型为例,在controller包中新建一个DataBindController
类,接着定义一个baseType
方法(在里面使用了@ResponseBody
这个注解就是将返回的对象转换为json格式的字符串,并通过response响应给客户端):
1 2 3 4 5 6 7 8 9 10 11 12 13 @Controller public class DataBindController { @Autowired private CourseDao courseDao; //基本数据类型,以int为例 @RequestMapping(value = "/baseType") @ResponseBody //@ResponseBody这个注解就是将返回的对象转换为json格式的字符串,并通过response响应给客户端 public String baseType(@RequestParam(value = "id")int id){ return "this baseType id is "+id; } }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/baseType?id=1
,你会发现页面显示this baseType id is 1
;注意参数只能是int类型,如果传入id="abc"
,访问http://localhost/baseType?id=abc
,会报400参数异常; 还有当设置参数为int类型时,那么key是必传的,如果不传入,访问http://localhost:8080/baseType?id
,会报500内部错误异常。
包装类类型 包装类类型以Integer类型为例,新建packageType
方法:
1 2 3 4 5 6 //包装类,以Integer为例 @RequestMapping(value = "/packageType") @ResponseBody public String packageType(@RequestParam(value = "id")Integer id){ return "this packageType id is "+id; }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/packageType?id=1
,你会发现页面显示this packageType id is 1
;注意参数只能是int类型,如果传入id="abc"
,访问http://localhost/packageType?id=abc
,会报400参数异常; 还有当设置参数为Integer类型时,那么key是可以不传的,如果不传入,访问http://localhost:8080/packageType?id
,页面显示this packageType id is nul
。因为包装类本质上是一个对象,对于可能为空的数据,最好使用包装类型。还有一点就是int型的默认值为0,Integer的默认值为null,如果数据库某字段允许NULL值,使用int型的话,存入的是0而不是NULL。
数组类型 数组类型,以String类型的数组为例,新建arrayType
方法:
1 2 3 4 5 6 7 8 9 10 //数组类型,以String类型的数组为例 @RequestMapping(value = "/arrayType") @ResponseBody public String arrayType(String[] name){ //此处的name即为参数的名称 StringBuffer stringBuffer = new StringBuffer(); for(String item:name) { stringBuffer.append(item).append(" "); } return stringBuffer.toString(); }
本方法就是将name数组中的信息依次添加到一个新的字符串中,然后运行项目,在浏览器地址栏中输入http://localhost:8080/arrayType?name=zhangsan&name=lisi
,你会发现页面显示zhangsan lisi
;注意此处必须是name为键的键值对。SpringMVC可以将同一个字段key的多个值映射到一个数组中,那自然也能映射到List中。将参数String[] name
改成List<String> name
,完全没问题。
对象及多层级对象 对象以及多层级对象比前面的稍微复杂一些,我们以讲师和课程为例进行介绍。第一步,在entity包中新建Course.java
和Author.java
文件:
1 2 3 4 5 6 7 8 9 10 **************Course.java*********** private int id; private String name; private double price; private Author author; //setter和getter方法 **************Author.java*********** private int id; private String name; //setter和getter方法
第二步,新建add.jsp页面(注意action="pojoType"
,这是表单提交后交由哪个Servlet去处理的,也就是后面controller中方法的访问路径,当然一般路径和名称是一致的,因此也就是后面的方法名称):
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>add</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <style type="text/css"> body{ overflow-x:hidden; } #main{ width:1200px; height:600px; margin-left:500px; } </style> </head> <body> <div id="main"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>添加课程</h1> </div> </div> <form class="form-horizontal" role="form" action="pojoType" method="post"> <div class="form-group"> <label class="col-sm-1 control-label">课程编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="id" placeholder="请输入课程编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程名称</label> <div class="col-sm-3"> <input type="text" class="form-control" name="name" placeholder="请输入课程名称"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程价格</label> <div class="col-sm-3"> <input type="text" class="form-control" name="price" placeholder="请输入课程价格"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="author.id" placeholder="请输入讲师编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师姓名</label> <div class="col-sm-3"> <input type="text" class="form-control" name="author.name" placeholder="请输入讲师姓名"> </div> </div> <div class="form-group"> <div class="col-sm-offset-1 col-sm-3"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form> </div> </body> </html>
第三步,在dao包中新建CourseDao.java类,这个类用于保存用户提交的信息,类似于数据库的作用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package com.envy.dao; import com.envy.entity.Course; import org.springframework.stereotype.Repository; import java.util.Collection; import java.util.HashMap; import java.util.Map; @Repository public class CourseDao { //使用Map来替代数据库 private Map<Integer, Course> courses = new HashMap<>(); //将pojoType方法中传递的model保存到map中 public void add(Course course){ courses.put(course.getId(), course); } //将map中所有的信息进行返回 public Collection<Course> getAll(){ return courses.values(); } }
第四步,新建index.jsp页面,用于展示所添加的信息(注意只要后面所有方法中返回的ModelAndView中添加的对象名称是courses,那么本页面可作为公共页面使用):
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <title>课程列表</title> <link href="css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>课程管理</h1> </div> </div> <!-- 显示表格数据 --> <div class="row"> <div class="col-md-12"> <table class="table table-hover" id="emps_table"> <thead> <tr> <th> <input type="checkbox" id="check_all"/> </th> <th>编号</th> <th>课程名</th> <th>价格</th> <th>讲师</th> <th>操作</th> </tr> </thead> <tbody> <c:forEach items="${courses}" var="course"> <tr> <td><input type='checkbox' class='check_item'/></td> <td>${course.id}</td> <td>${course.name}</td> <td>${course.price}</td> <td>${course.author.name}</td> <td> <button class="btn btn-primary btn-sm edit_btn"> <span class="glyphicon glyphicon-pencil">编辑</span> </button> <button class="btn btn-danger btn-sm delete_btn"> <span class="glyphicon glyphicon-trash">删除</span> </button> </td> </tr> </c:forEach> </tbody> </table> </div> </div> </div> </body> </html>
第五步,新建pojoType
方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 //对象,以课程和讲师为例 @RequestMapping(value = "/pojoType") public ModelAndView pojoType(Course course){ //保存前端页面提交信息 courseDao.add(course); //装载模型数据和视图解析 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("courses", courseDao.getAll()); //设置视图名称 modelAndView.setViewName("index"); return modelAndView; }
SpringMVC可以将表单的字段与Controller方法参数中对象的属性 进行映射,前提是两者的名称和类型一致。比如表单中传入name=ssm&price=100
,方法参数中的Course对象也恰好有String name
与double price
属性,SpringMVC将完成字段 –> 对象属性的映射并将数据绑定到Cours对象的对应属性上。SpringMVC将我们输入字段的类型、名称与方法参数中User对象中的属性一一对比,如果吻合将会自动映射过去并封装成对象,如果某些字段和对象的属性不能匹配,那么封装成的对象中该属性为null。
然后运行项目,在浏览器地址栏中输入http://localhost:8080/add.jsp
,填写课程信息后提交发现url变为http://localhost:8080/pojoType
,同时将你刚才添加的课程信息进行了展示。
List List类型,注意Controller中的方法内不能直接传参数List<Course> courses
,因为它无法完成绑定(只能绑定单一类),只能借助于包装类,在包装类中定义List集合的属性,然后给这个包装类的属性进行绑定。
第一步,新建CourseList类,并将List<Course> courses
设置为它的属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.envy.entity; import java.util.List; public class CourseList { private List<Course> courses; //属性名称 public List<Course> getCourses() { return courses; } public void setCourses(List<Course> courses) { this.courses = courses; } }
第二步,新建addList.jsp页面(注意表单中的字段应如何设置,前面说过是字段与其属性进行关联,我们给CourseList类设置的属性为courses,它是一个List,但是我们可以通过下标来完成对象的获取,第一个为courses[0]
,依次类推。对于课程讲师的属性设置需要使用courses[0].author
来获取):
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>add</title> <link href="css/bootstrap.min.css" rel="stylesheet"> <style type="text/css"> body{ overflow-x:hidden; } #main{ width:1200px; height:600px; margin-left:500px; } </style> </head> <body> <div id="main"> <!-- 标题 --> <div class="row"> <div class="col-md-12"> <h1>添加课程</h1> </div> </div> <form class="form-horizontal" role="form" action="listType" method="post"> <!--第一个课程--> <div class="form-group"> <label class="col-sm-1 control-label">课程1编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[0].id" placeholder="请输入课程1编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程1名称</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[0].name" placeholder="请输入课程1名称"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程1价格</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[0].price" placeholder="请输入课程1价格"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[0].author.id" placeholder="请输入讲师1编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师姓名</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[0].author.name" placeholder="请输入讲师1姓名"> </div> </div> <!--第二个课程--> <div class="form-group"> <label class="col-sm-1 control-label">课程2编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[1].id" placeholder="请输入课程2编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程2名称</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[1].name" placeholder="请输入课程2名称"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">课程2价格</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[1].price" placeholder="请输入课程2价格"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师编号</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[1].author.id" placeholder="请输入讲师2编号"> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">讲师姓名</label> <div class="col-sm-3"> <input type="text" class="form-control" name="courses[1].author.name" placeholder="请输入讲师2姓名"> </div> </div> <div class="form-group"> <div class="col-sm-offset-1 col-sm-3"> <button type="submit" class="btn btn-default">提交</button> </div> </div> </form> </div> </body> </html>
第三步,新建listType
方法(注意后面遍历的是courseList中的属性即List对象,不是courseList本身):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @RequestMapping(value = "/listType") public ModelAndView listType(CourseList courseList){ //注意这里遍历的是courseList中的属性即List对象,不是courseList本身 for(Course course:courseList.getCourses()){ //保存前端页面提交信息 courseDao.add(course); } //装载模型数据和视图解析 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("courses", courseDao.getAll()); //设置视图名称 modelAndView.setViewName("index"); return modelAndView; }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/addList.jsp
,填写课程信息后提交发现url变为http://localhost:8080/listType
,同时将你刚才添加的课程信息进行了展示。
Map Map类型,注意Controller中的方法内不能直接传参数Map<String,Course> courseMap
,因为它无法完成绑定(只能绑定单一类),只能借助于包装类,在包装类中定义Map集合的属性,然后给这个包装类的属性进行绑定。
第一步,新建CourseMap类,并将Map<String,Course> courseMap
设置为它的属性:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package com.envy.entity; import java.util.Map; public class CourseMap { private Map<String,Course> courseMap; //属性名称 public Map<String, Course> getCourseMap() { return courseMap; } public void setCourseMap(Map<String, Course> courseMap) { this.courseMap = courseMap; } }
第二步,新建addMap.jsp页面,这个页面和addList.jsp页面非常相似,只有对象获取的方式不同。对于List对象可以通过下标来完成对象的获取,第一个为courses[0],但是对于Map对象不能使用该方法,可以courseMap['one']
,courseMap['two']
等方式。
第三步,新建mapType
方法(注意后面遍历的是courseMap中的属性即Map对象,不是courseMap本身):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 @RequestMapping(value = "/mapType") public ModelAndView mapType(CourseMap courseMap){ //注意这里遍历的是courseMap中的属性即Map对象,不是courseMap本身 for(String key:courseMap.getCourseMap().keySet()){ Course course = courseMap.getCourseMap().get(key); courseDao.add(course); } //装载模型数据和视图解析 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("courses", courseDao.getAll()); //设置视图名称 modelAndView.setViewName("index"); return modelAndView; }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/addMap.jsp
,填写课程信息后提交发现url变为http://localhost:8080/mapType
,同时将你刚才添加的课程信息进行了展示。
Set Set类型,注意Controller中的方法内不能直接传参数Set<Course> courseSet
,因为它无法完成绑定(只能绑定单一类),只能借助于包装类,在包装类中定义Set集合的属性,然后给这个包装类的属性进行绑定。
第一步,新建courseSet类,并将Set<Course> courseSet
设置为它的属性,同时注意SpringMVC绑定set时必须初始化set且必须有两个对象,如果没有则报500错误。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package com.envy.entity; import java.util.HashSet; import java.util.Set; public class CourseSet { private Set<Course> courseSet = new HashSet<>(); //属性名称 public Set<Course> getCourseSet() { return courseSet; } public void setCourseSet(Set<Course> courseSet) { this.courseSet = courseSet; } //注意set中必须有两个对象,否则无法完成绑定 public CourseSet(){ courseSet.add(new Course()); courseSet.add(new Course()); } }
第二步,新建addSet.jsp页面,这个页面和addList.jsp页面非常相似,对象获取的方式也是通过下标来完成对象的获取,第一个为courseSet[0],以此类推。
第三步,新建setType
方法(注意后面遍历的是courseSet中的属性即Set对象,不是courseSet本身):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 @RequestMapping(value = "/setType") public ModelAndView setType(CourseSet courseSet){ //注意这里遍历的是courseSet中的属性即Set对象,不是courseSet本身 for(Course course:courseSet.getCourseSet()){ courseDao.add(course); } //装载模型数据和视图解析 ModelAndView modelAndView = new ModelAndView(); //添加模型数据 modelAndView.addObject("courses", courseDao.getAll()); //设置视图名称 modelAndView.setViewName("index"); return modelAndView; }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/addSet.jsp
,填写课程信息后提交发现url变为http://localhost:8080/setType
,同时将你刚才添加的课程信息进行了展示。
JSON格式 JSON格式,注意方法此时不需要通过视图解析,直接返回Json格式。SpringMVC无法完成json数据类型的绑定,但是可以借助于jackson-bind
完成绑定。需要两个步骤:第一步,先导入jackson-bind
的Maven依赖:
1 2 3 4 5 6 <!--添加jackson用于完成SpringMVC数据绑定json--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency>
第二步,在springmvc.xml中配置消息转换器,只有这两步才能将http请求参数转换成jso格式 :
1 2 3 4 5 6 <!--配置json转换器--> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </mvc:message-converters> </mvc:annotation-driven>
接着通过一个json.jsp页面来模仿数据交互(使用ajax通过post方式发送数据):
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 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>json类型数据绑定</title> </head> <body> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> <script type="text/javascript"> $(function () { var course = { id: "2", name: "SpringMVC数据绑定", price: "188" }; $.ajax({ url:"jsonType", data:JSON.stringify(course), type:"post", contentType: "application/json;charset=UTF-8", dataType:"json", success:function (data) { alert(data.name+"-----"+data.price) } }) }) </script> </body> </html>
最后新建jsonType
方法(这个方法仅仅对ajax发送过来的数据中的价格进行了加100操作,然后又以json形式进行了返回,注意需要使用@RequestBody
这个注解用来接收前端传递给后端的json字符串中的数据(即请求体中的数据);):
1 2 3 4 5 6 7 8 //JSON,注意此时不需要通过视图解析,直接返回JSOn格式 //需要使用@RequestBody这个注解,这个注解主要用来接收前端传递给后端的json字符串中的数据(请求体中的数据); @RequestMapping(value = "/jsonType") @ResponseBody public Course jsonType(@RequestBody Course course){ course.setPrice(course.getPrice()+100); return course; }
然后运行项目,在浏览器地址栏中输入http://localhost:8080/json.jsp
,回车后立即发现url变为http://localhost:8080/jsonType
,同时将价格进行加100操作后,弹出显示了288。
那么关于SpringMVC中的数据绑定就先介绍到这里,后续会退出一篇更完整的,同时也是基于Restlet Client
,那样的话就不再出现jsp页面,可能效果会更好一些。