中国空间网站,网站建设如何敲图标代码,网页设计个人博客模板,怎么在网站注册账号1.SpringMVC请求流程
1.1 SpringMVC请求处理流程分析
Spring MVC框架也是⼀个基于请求驱动的Web框架#xff0c;并且使⽤了前端控制器模式#xff08;是⽤来提供⼀个集中的请求处理机制#xff0c;所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计#xff0c;再根据请求…1.SpringMVC请求流程
1.1 SpringMVC请求处理流程分析
Spring MVC框架也是⼀个基于请求驱动的Web框架并且使⽤了前端控制器模式是⽤来提供⼀个集中的请求处理机制所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计再根据请求映射规则分发给相应的⻚⾯控制器动作/处理器进⾏处理。⾸先让我们整体看⼀下Spring MVC处理请求的流程 1.⾸先⽤户发送请求,请求被SpringMvc前端控制器DispatherServlet捕获
2.前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调⽤HandlerMapping
3.前端控制器(DispatherServlet)获得返回的HandlerExecutionChain包括Handler对象以及Handler对象对应的拦截器
4.DispatcherServlet 根据获得的HandlerExecutionChain选择⼀个合适的HandlerAdapter。附注如果成功获得HandlerAdapter 后此时将开始执⾏拦截器的preHandler(...)⽅法
5.HandlerAdapter根据请求的Handler适配并执⾏对应的HandlerHandlerAdapter(提取Request中的模型数据填充Handler⼊参开 始执⾏HandlerController)。 在填充Handler的⼊参过程中根据配置Spring将做⼀些额外的工作
HttpMessageConveter 将请求消息如Json、xml等数据转换成⼀个对象将对象转换为指定的响应信息。
数据转换对请求消息进⾏数据转换。如String转换成Integer、Double等数据格式化
数据格式化。 如将字符串转换成格式化数字或格式化⽇期等
数据验证 验证数据的有效性⻓度、格式等验证结果存储到BindingResult或Error中
6.Handler执⾏完毕返回⼀个ModelAndView(即模型和视图)给HandlerAdaptor
7.HandlerAdaptor适配器将执⾏结果ModelAndView返回给前端控制器。
8.前端控制器接收到ModelAndView后请求对应的视图解析器。
9.视图解析器解析ModelAndView后返回对应View;
10.渲染视图并返回渲染后的视图给前端控制器。
11.最终前端控制器将渲染后的⻚⾯响应给⽤户或客户端
2.SpringMVC环境搭建
2.1开发环境
Idea Maven Jdk1.8 Jetty
2.2. 新建 Maven webApp
Idea 下创建 springmvc01 ⼯程
2.3 pom.xml propertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/properties
dependencies!-- spring web --dependencygroupIdorg.springframework/groupIdartifactIdspring-web/artifactIdversion5.2.4.RELEASE/version/dependency!-- spring mvc --dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.2.4.RELEASE/version/dependency!-- web servlet --dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion3.0.1/version/dependency/dependenciesbuildfinalNameSpringMVC1/finalName
plugins!-- 编译环境插件 --plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-compiler-plugin/artifactIdversion2.3.2/versionconfigurationsource1.8/sourcetarget1.8/targetencodingUTF-8/encoding/configuration/plugin!-- jetty插件 --plugingroupIdorg.eclipse.jetty/groupIdartifactIdjetty-maven-plugin/artifactIdversion9.4.27.v20200227/versionconfigurationscanIntervalSeconds10/scanIntervalSeconds!-- 设置端⼝ --httpConnectorport8080/port/httpConnector!-- 设置项⽬路径 --webAppConfigcontextPath/springmvc01/contextPath/webAppConfig/configuration/plugin/plugins/build
2.4 配置web.xml ?xml version1.0 encodingUTF-8?
web-app idWebApp_ID version3.0xmlnshttp://java.sun.com/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
!-- 编码过滤 utf-8 --filterdescriptionchar encoding filter/descriptionfilter-nameencodingFilter/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueUTF-8/param-value/init-param/filterfilter-mappingfilter-nameencodingFilter/filter-nameurl-pattern/*/url-pattern/filter-mapping!-- servlet请求分发器 --servletservlet-namespringMvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:servlet-context.xml/param-value/init-param!-- 表示启动容器时初始化该Servlet --load-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringMvc/servlet-name!-- 这是拦截请求 /代表拦截所有请求*.do拦截所有.do请求 --!-- url-pattern//url-pattern --url-pattern*.do/url-pattern/servlet-mapping
/web-app
2.4.1 servlet-context.xml配置
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:mvchttp://www.springframework.org/schema/mvcxmlns:contexthttp://www.springframework.org/schema/contextxsi:schemaLocationhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd
!-- 开启扫描器 --context:component-scan base-packageorg.example.springmvc.controller/!-- 使⽤默认的 Servlet 来响应静态⽂件 --mvc:default-servlet-handler/!-- 开启注解驱动--mvc:annotation-driven/!-- 配置视图解析器 --bean classorg.springframework.web.servlet.view.InternalResourceViewResolveridinternalResourceViewResolver!-- 前缀在WEB-INF⽬录下的jsp⽬录下 --property nameprefix value/WEB-INF/jsp//!-- 后缀以.jsp结尾的资源 --property namesuffix value.jsp//bean
/beans
2.4.2 页面控制器的编写
package org.example.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
Controller
public class HelloController {
/*** 请求映射地址 /hello.do* return*/RequestMapping(/hello)public ModelAndView hello(){ModelAndView mvnew ModelAndView();mv.addObject(hello, hello spring mvc);mv.setViewName(hello);return mv;}
}
2.4.3 添加视图页面
在 WEB-INF 下新建 jsp ⽂件夹 并在⽂件夹下新建 hello.jsp
%page languagejava importjava.util.* pageEncodingUTF-8%
%String path request.getContextPath();String basePath request.getScheme()://request.getServerName():request.getServerPort()path/;
%
!DOCTYPE HTML
html
headbase href%basePath %titleMy JSP hello.jsp starting page/titlemeta http-equivpragma contentno-cachemeta http-equivcache-control contentno-cachemeta http-equivexpires content0meta http-equivkeywords contentkeyword1,keyword2,keyword3meta http-equivdescription contentThis is my page
/head
body
!-- el表达式接收参数值 --
${hello}
/body
/html
2.4.4 启动jetty服务器 2.4.5 页面结果
访问地址 http://localhost:8080/springmvc01/hello.do 3.URL地址映射配置
3.1 RequestMapping * URL地址映射配置
* RequestMappping(路径)
* 注解可以声明在类级别或方法级别。如果注解设置在类级别则表示将请求路径与控制器绑定如果将注解设置在方法级别则表示请求路径与方法绑定
* 1.类级别
* 2.方法级别
* 3.类级别方法级别
* 注如果在类上设置了RequestMapping注解则访问时需要将类路径当做方法路径的父路径。即 类路径/方法路径 3.1.1 映射单个URL
RequestMapping() 或 RequestMapping(value) /*** RequestMapping 声明在⽅法上⾯映射单个 URL* 访问地址如果有类路径需要写在⽅法路径前⾯* http://ip:port/springmvc01/test01* return*/RequestMapping(/test01)
// RequestMapping(value /test01)public ModelAndView test01(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test01);modelAndView.setViewName(hello);return modelAndView;}/*** 路径开头是否加 斜杠/ 均可* RequestMapping(/请求路径) 与 RequestMapping(请求路径)均可* 建议加上如RequestMapping(/test02)* 访问地址如果有类路径需要写在⽅法路径前⾯* http://ip:port/springmvc01/test02* return*/RequestMapping(test02)public ModelAndView test02(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test02);modelAndView.setViewName(hello);return modelAndView;}
3.1.2 映射多个URL
RequestMapping({,}) 或 RequestMapping(value{,}) /*** RequestMapping 声明在⽅法上⾯映射多个 URL* ⽀持⼀个⽅法绑定多个 url 的操作* 访问地址如果有类路径需要写在⽅法路径前⾯* http://ip:port/springmvc01/test03_01* http://ip:port/springmvc01/test03_02* return*/RequestMapping({/test03_01,/test03_02})
// RequestMapping(value {/test03_01,/test03_02})public ModelAndView test03() {ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello, test03);modelAndView.setViewName(hello);return modelAndView;}
3.1.3 映射URL在控制器上
Controller
RequestMapping(/url)
public class UrlController {/*** RequestMapping 声明在类上⾯类中的的⽅法都是以该地址作为⽗路径* 声明级别* 类级别 ⽅法级别 /类路径/⽅法路径* 访问地址* http://ip:port/springmvc01/url/test04* return*/RequestMapping(/test04)public ModelAndView test04(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test04);modelAndView.setViewName(hello);return modelAndView;}
}
3.1.4 设置URL映射的请求方式
/*** 设置请求⽅式* 通过 method 属性设置⽅法⽀持的请求⽅式默认 GET请求和 POST等请求都⽀持。* 设置了请求⽅式则只能按照指定的请求⽅式请求。* 访问地址只能使⽤POST请求访问* http://ip:port/springmvc01/url/test05* return*/
RequestMapping(value /test05,method RequestMethod.POST)
public ModelAndView test05(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test05);modelAndView.setViewName(hello);return modelAndView;
} 3.1.5 通过参数名称映射URL
/*** 通过参数名称访问* 通过参数的形式访问* 访问地址* http://ip:port/springmvc01/url?test06* return*/
RequestMapping(params test06)
public ModelAndView test06(){ModelAndView modelAndView new ModelAndView();modelAndView.addObject(hello,test06);modelAndView.setViewName(hello);return modelAndView;
} 4.参数绑定
4.1 基本数据类型
访问地址http://localhost:8080/springmvc01/data01?age18money500 问号后面为参数
/*** 基本类型数据绑定* 参数值必须存在。如果没有指定参数值也没有设置参数默认值则会报500异常。* param age* param money*/
RequestMapping(data01)
public void data01(int age, double money){System.out.println(age: age , money: money);
}
/*** 基本类型数据绑定* 通过注解 RequestParam 标记⼀个形参为请求参数。注解声明在形参的前⾯* 可以通过注解的属性设置相关内容* 设置参数的默认值 defaultValue* param age* param money*/
RequestMapping(data02)
public void data02(RequestParam(defaultValue 18) int age,
RequestParam(defaultValue 10.0) double money){System.out.println(age: age , money: money);
}
/*** 基本类型数据绑定* 通过注解 RequestParam 标记⼀个形参为请求参数。注解声明在形参的前⾯* 可以通过注解的属性设置相关内容* 设置参数的参数名别名 name* param age* param money*/
RequestMapping(data03)
public void data03(RequestParam(defaultValue 18, name userAge) int age,
RequestParam(defaultValue 10.0, name userMoney) double money){System.out.println(age: age , money: money);
}
4.2 包装类型
/*** 包装类型数据绑定 如果数据是基本类型建议使⽤包装类型* 客户端请求参数名与⽅法形参名保持⼀致默认参数值为null* 可以通过 RequestParam 的name属性设置参数的别名defaultValue属性设置参数默认值* param age* param money*/
RequestMapping(data05)
public void data05(Integer age, Double money){System.out.println(age: age , money: money);
}
4.3 字符串类型
/*** 字符串数据绑定* 客户端请求参数名与⽅法形参名保持⼀致默认参数值为null* 可以通过 RequestParam 的name属性设置参数的别名defaultValue属性设置参数默认值* param userName* param userPwd*/
RequestMapping(data04)
public void data04(String userName, String userPwd){System.out.println(userName: userName , userPwd: userPwd);
}
4.4 数组类型
/*** 数组类型数据绑定* 客户端传参形式ids1ids2ids3* param ids*/
RequestMapping(/data06)
public void data06(String[] ids){for(String id : ids){System.out.println(id ---);}
}
4.5 JavaBean类型
/*** JavaBean 数据绑定* 客户端请求的参数名与JavaBean对象的属性字段名保持⼀致* param user*/
RequestMapping(/data07)
public void data07(User user) {System.out.println(user);
}
User.java
package com.xxxx.springmvc.po;
public class User {private int id;private String userName;private String userPwd;public int getId() {return id;}public void setId(int id) {this.id id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd userPwd;}Overridepublic String toString() {return User [id id , userName userName , userPwd userPwd ];}
}
4.6 List类型
此时 User 实体需要定义对应 list 属性。对于集合的参数绑定⼀般需要使⽤ JavaBean 对象进⾏包装
public class User {private int id;private String userName;private String userPwd;
private ListPhone phones new ArrayListPhone();public ListPhone getPhones() {return phones;}public void setPhones(ListPhone phones) {this.phones phones;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd userPwd;}Overridepublic String toString() {return User [id id , userName userName , userPwd userPwd , phones phones ];}
}
Phone实体
public class Phone {private String num;public String getNum() {return num;}public void setNum(String num) {this.num num;}Overridepublic String toString() {return Phone [num num ];}}
Jsp ⻚⾯定义 form actiondata08 methodpostinput namephones[0].num value123456 /input namephones[1].num value4576 /button typesubmit 提交/button
/form Controller ⽅法
RequestMapping(/data08)
public void data08(User user){System.out.println(user);
}
4.7 Set类型
Set 和 List 类似也需要绑定在对象上⽽不能直接写在 Controller ⽅法的参数中。但是绑定Set数
据时必须先在Set对象中add相应的数量的模型对象。
public class User {private int id;private String userName;private String userPwd;
private SetPhone phones new HashSetPhone();
public User() {phones.add(new Phone());phones.add(new Phone());phones.add(new Phone());}/*public ListPhone getPhones() {return phones;}public void setPhones(ListPhone phones) {this.phones phones;}*/public int getId() {return id;}public void setId(int id) {this.id id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd userPwd;}public SetPhone getPhones() {return phones;}public void setPhones(SetPhone phones) {this.phones phones;}
}
Controller ⽅法
RequestMapping(/data09)
public void data09(User user){System.out.println(user);
}
表单⻚⾯ form actiondata09 methodpostinput namephones[0].num value123456 /input namephones[1].num value4576 /input namephones[2].num value4576 /button typesubmit 提交/button
/form 4.8 Map类型
Map最为灵活它也需要绑定在对象上⽽不能直接写在Controller⽅法的参数中。
public class User {private int id;private String userName;private String userPwd;
private SetPhone phonesnew HashSetPhone();
private MapString, Phone mapnew HashMapString, Phone();
// private ListPhone phonesnew ArrayListPhone();
public User() {phones.add(new Phone());phones.add(new Phone());phones.add(new Phone());}/*public ListPhone getPhones() {return phones;}public void setPhones(ListPhone phones) {this.phones phones;}*/public int getId() {return id;}public void setId(int id) {this.id id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd userPwd;}public SetPhone getPhones() {return phones;}public void setPhones(SetPhone phones) {this.phones phones;}public MapString, Phone getMap() {return map;}public void setMap(MapString, Phone map) {this.map map;}
}
Controller ⽅法
RequestMapping(/data10)
public void data10(User user){SetEntryString, Phone set user.getMap().entrySet();for(EntryString, Phone entry:set){System.out.println(entry.getKey()--entry.getValue().getNum());}
}
表单页面 form actiondata10 methodpostinput namemap[1].num value123456 /input namemap[2].num value4576 /input namemap[3].num value4576 /button typesubmit 提交/button
/form 5.请求转发与重定向
SpringMVC默认采⽤服务器内部转发的形式展示⻚⾯信息。同样也⽀持重定向⻚⾯。
5.1 重定向
重定向是发⼀个302的状态码给浏览器浏览器⾃⼰去请求跳转的⽹⻚。地址栏会发⽣改变。
重定向以 redirect: 开头
/*** 重定向到JSP⻚⾯* return*/
RequestMapping(value/view01)
public String view01(){return redirect:view.jsp;
}
/*** 重定向到JSP⻚⾯* 传递参数* return*/
RequestMapping(value/view02)
public String view02(){return redirect:view.jsp?unamezhangsanupwd123456;
}
/*** 重定向到JSP⻚⾯* 传递参数 传递中⽂参数会出现乱码* return*/
RequestMapping(value/view03)
public String view03(){return redirect:view.jsp?uname张三upwd123456;
}
/*** 重定向到JSP⻚⾯* 传递参数 通过 RedirectAttributes 对象设置重定向参数避免中⽂乱码问题* param redirectAttributes* return*/
RequestMapping(value/view04)
public String view04(RedirectAttributes redirectAttributes){redirectAttributes.addAttribute(uname,张三);redirectAttributes.addAttribute(upwd,123456);return redirect:view.jsp;
}
/*** 重定向到JSP⻚⾯* 返回 ModelAndView 对象* param modelAndView* return*/
RequestMapping(value/view06)
public ModelAndView view06(ModelAndView modelAndView){modelAndView.addObject(uname,李四);modelAndView.addObject(upwd,123321);modelAndView.setViewName(redirect:view.jsp);return modelAndView;
}
/*** 重定向到Controller* 返回 ModelAndView 对象* param modelAndView* return*/
RequestMapping(value/view07)
public ModelAndView view07(ModelAndView modelAndView){modelAndView.addObject(uname,admin);modelAndView.setViewName(redirect:test01);return modelAndView;
}
⻚⾯中获取参数值 ${param.参数名} 5.2 请求转发
请求转发直接调⽤跳转的⻚⾯让它返回。对于浏览器来说它⽆法感觉服务器有没有forward。地址栏不发⽣改变。可以获取请求域中的数据。
请求转发以 forward: 开头
/*** 请求转发到JSP⻚⾯*/
RequestMapping(/view08)
public String view08(){return forward:view.jsp;
}
/*** 请求转发到JSP⻚⾯* 设置参数*/
RequestMapping(/view09)
public String view09(){return forward:view.jsp?uname张三upwd123456;
}
/*** 请求转发到JSP⻚⾯* 设置请求域*/
RequestMapping(/view10)
public String view10(Model model){model.addAttribute(uname,张三);return forward:view.jsp;
}
/*** 请求转发到JSP⻚⾯ 默认* 默认会去指定⽬录下找JSP⻚⾯ 配置⽂件中设置的*/
RequestMapping(/view11)
public String view11(){return /../../view;
}
/*** 请求转发到 Controller* return*/
RequestMapping(/view12)
public ModelAndView view12(ModelAndView modelAndView){modelAndView.setViewName(forward:test01);return modelAndView;
}
/*** 请求转发到 Controller* 传递参数* return*/
RequestMapping(/view13)
public ModelAndView view13(ModelAndView modelAndView){modelAndView.setViewName(forward:test01?unameadmin);return modelAndView;
}
⻚⾯中获取数据 获取传递的参数${param.参数名}
获取请求域的数据${请求域中设置的名称} 6.JSON数据开发
6.1 基本概念
Json 在企业开发中已经作为通⽤的接⼝参数类型在⻚⾯客户端解析很⽅便。SpringMVC 对于json 提供了良好的⽀持这⾥需要修改相关配置添加 json 数据⽀持功能。
6.1.1 ResponseBody
该注解⽤于将 Controller 的⽅法返回的对象通过适当的 HttpMessageConverter 转换为指定格式后写⼊到 Response 对象的 body 数据区。
返回的数据不是 html 标签的⻚⾯⽽是其他某种格式的数据时如 json、xml 等使⽤通常⽤于ajax请求。
6.1.2 RequestBody
该注解⽤于读取 Request 请求的 body 部分数据使⽤系统默认配置的 HttpMessageConverter 进⾏解析然后把相应的数据绑定到要返回的对象上 再把 HttpMessageConverter 返回的对象数据绑定到controller 中⽅法的参数上。
6.2 使用配置
6.2.1 添加json相关坐标
pom.xml !-- 添加json 依赖jar包 --
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.10.0/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.10.0/version
/dependency
dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.10.0/version
/dependency 6.2.2 修改配置⽂件
servlet-context.xml !-- mvc 请求映射 处理器与适配器配置 --
mvc:annotation-drivenmvc:message-convertersbean classorg.springframework.http.converter.StringHttpMessageConverter /bean
classorg.springframework.http.converter.json.MappingJackson2HttpMessageConverter //mvc:message-converters
/mvc:annotation-driven 6.2.3 注解使用
6.2.3.1 ResponseBody
Controller
RequestMapping(/user)
public class UserController {/*** ResponseBody 返回的是JOSN格式的数据返回JavaBean对象* 注解设置在⽅法体上* return*/RequestMapping(queryUser01)ResponseBodypublic User queryUser01(){User user new User();user.setId(1);user.setUserName(zhangsan);user.setUserPwd(123456);// 返回的是user对象return user;}/*** ResponseBody 返回的是JOSN格式的数据返回JavaBean对象* 注解设置在⽅法返回对象前修饰符之后* return*/RequestMapping(queryUser02)public ResponseBody User queryUser02(){User user new User();user.setId(2);user.setUserName(lisi);user.setUserPwd(123321);// 返回的是user对象return user;}
/*** ResponseBody 返回的是JOSN格式的数据返回集合* return*/RequestMapping(queryUser02)public ResponseBody User queryUser02(){User user new User();user.setId(2);user.setUserName(lisi);user.setUserPwd(123321);// 返回的是user对象return user;}
/*** ResponseBody 返回的是JOSN格式的数据返回集合* return*/RequestMapping(/queryUser03)ResponseBodypublic ListUser queryUser03(){ListUser list new ArrayList();User user01 new User();user01.setId(1);user01.setUserName(zhangsan);user01.setUserPwd(123456);User user02 new User();user02.setId(2);user02.setUserName(lisi);user02.setUserPwd(123321);list.add(user01);list.add(user02);// 返回的是user集合return list;}
} 6.2.3.2 RequestBody
RequestBody 注解常⽤来处理 content-type 不是默认的 application/x-www-form-urlcoded 类型的内容⽐如说application/json 或者是application/xml 等。⼀般情况下来说常⽤其来处理 application/json类型。RequestBody接受的是⼀个 json 格式的字符串⼀定是⼀个字符串。
通过 RequestBody 可以将请求体中的 JSON 字符串绑定到相应的 bean 上当然也可以将其分别绑定到对应的字符串上。
/*** RequestBody 规定请求的参数是JOSN格式的字符串* 注解设置在形参前⾯* param user* return*/
RequestMapping(/getUser)
ResponseBody
public User getUser(RequestBody User user){System.out.println(user);return user;
}