请求映射路径 @RequestMapping注解 名称:@RequestMapping 类型:方法注解、类注解 位置:SpringMVC控制器方法定义上方。 作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀。 范例: 1 2 3 4 5 6 7 8 9 10 11 12 @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/save") @ResponseBody public String save () { System.out.println("user save ..." ); return "{'module':'user save'}" ; } }
请求参数 发送普通类型参数 请求方式 GET请求传递普通参数 普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。
1 2 3 4 5 6 7 8 @RequestMapping("/commonParam") @ResponseBody public String commonParam (String name ,int age) { System.out.println("普通参数传递 name ==> " +name); System.out.println("普通参数传递 age ==> " +age); return "{'module':'common param'}" ; }
问题:如果传递的参数是中文,会发现接收到的参数出现了中文乱码问题。
原因:tomcat 8.5版本之后GET请求就不再出现中文乱码问题,如果使用的是tomcat7插件,就会出现GET请求中文乱码问题。
解决:在pom.xml添加tomcat7插件处配置UTF-8字符集,解决GET请求中文乱码问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <build > <plugins > <plugin > <groupId > org.apache.tomcat.maven</groupId > <artifactId > tomcat7-maven-plugin</artifactId > <version > 2.1</version > <configuration > <port > 80</port > <path > /</path > <uriEncoding > UTF-8</uriEncoding > </configuration > </plugin > </plugins > </build >
POST请求传递普通参数 普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数。
1 2 3 4 5 6 7 8 @RequestMapping("/commonParam") @ResponseBody public String commonParam (String name ,int age) { System.out.println("普通参数传递 name ==> " +name); System.out.println("普通参数传递 age ==> " +age); return "{'module':'common param'}" ; }
问题:POST请求传递的参数如果包含中文那么就会出现中文乱码问题,说明之前配置的tomcat插件uri路径编解码字符集无法解决POST请求中文乱码问题。那么如何解决呢?
POST请求中文乱码处理 在加载SpringMVC配置的配置类中指定字符过滤器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { protected Class<?>[] getRootConfigClasses() { return new Class [0 ]; } protected Class<?>[] getServletConfigClasses() { return new Class []{SpringMvcConfig.class}; } protected String[] getServletMappings() { return new String []{"/" }; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = new CharacterEncodingFilter (); filter.setEncoding("UTF-8" ); return new Filter []{filter}; } }
五种类型参数传递 五种类型参数介绍 普通参数。 POJO类型参数。 嵌套POJO类型参数。 数组类型参数。 集合类型参数。 普通参数 普通参数:当请求参数名与形参变量名不同,使用@RequestParam绑定参数关系。
1 2 3 4 5 6 7 8 @RequestMapping("/commonParamDifferentName") @ResponseBody public String commonParamDifferentName (@RequestParam("name") String userName , int age) { System.out.println("普通参数传递 userName ==> " +userName); System.out.println("普通参数传递 age ==> " +age); return "{'module':'common param different name'}" ; }
名称:@RequestParam 类型:形参注解 位置:SpringMVC控制器方法形参定义前面。 作用:绑定请求参数与处理器方法形参间的关系。 参数:required:是否为必传参数。 defaultValue:参数默认值。 POJO类型参数 POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数。
1 2 3 4 5 public class User { private String name; private int age; }
1 2 3 4 5 6 7 @RequestMapping("/pojoParam") @ResponseBody public String pojoParam (User user) { System.out.println("pojo参数传递 user ==> " +user); return "{'module':'pojo param'}" ; }
注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
嵌套POJO类型参数 1 2 3 4 5 6 7 8 9 10 11 public class User { private String name; private int age; private Address address; } public class Address { private String province; private String city; private Address address; }
嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数。
1 2 3 4 5 6 7 @RequestMapping("/pojoContainPojoParam") @ResponseBody public String pojoContainPojoParam (User user) { System.out.println("pojo嵌套pojo参数传递 user ==> " +user); return "{'module':'pojo contain pojo param'}" ; }
注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装。
数组类型参数 数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数。
1 2 3 4 5 6 7 @RequestMapping("/arrayParam") @ResponseBody public String arrayParam (String[] likes) { System.out.println("数组参数传递 likes ==> " + Arrays.toString(likes)); return "{'module':'array param'}" ; }
集合类型参数 集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系。
1 2 3 4 5 6 7 @RequestMapping("/listParam") @ResponseBody public String listParam (@RequestParam List<String> likes) { System.out.println("集合参数传递 likes ==> " + likes); return "{'module':'list param'}" ; }
json数据参数传递 json数据参数介绍 json普通数组([“”,””,””,…]) json对象({key:value,key:value,…}) json对象数组([{key:value,…},{key:value,…}]) 传递json普通数组 代码演示 添加json数据转换相关坐标。 1 2 3 4 5 <dependency > <groupId > com.fasterxml.jackson.core</groupId > <artifactId > jackson-databind</artifactId > <version > 2.9.0</version > </dependency >
设置发送json数据(请求body中添加json数据)。
开启自动转换json数据的支持。 1 2 3 4 5 6 @Configuration @ComponentScan("edu.heuet.controller") @EnableWebMvc public class SpringMvcConfig {}
注意事项:
@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换。
在Controller中编写方法接收json参数 1 2 3 4 5 6 7 8 9 @RequestMapping("/listParamForJson") @ResponseBody public String listParamForJson (@RequestBody List<String> likes) { System.out.println("list common(json)参数传递 list ==> " +likes); return "{'module':'list common for json param'}" ; }
@EnableWebMvc注解介绍 名称:@EnableWebMvc 类型:配置类注解 位置:SpringMVC配置类定义上方。 作用:开启SpringMVC多项辅助功能。 范例: 1 2 3 4 5 @Configuration @ComponentScan("edu.heuet.controller") @EnableWebMvc public class SpringMvcConfig {}
@RequestBody注解介绍 名称:@RequestBody 类型:形参注解 位置:SpringMVC控制器方法形参定义前面。 作用:将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次。 范例: 1 2 3 4 5 6 @RequestMapping("/listParamForJson") @ResponseBody public String listParamForJson (@RequestBody List<String> likes) { System.out.println("list common(json)参数传递 list ==> " +likes); return "{'module':'list common for json param'}" ; }
传递json对象 POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数。
1 2 3 4 5 6 7 8 9 @RequestMapping("/pojoParamForJson") @ResponseBody public String pojoParamForJson (@RequestBody User user) { System.out.println("pojo(json)参数传递 user ==> " +user); return "{'module':'pojo for json param'}" ; }
传递json对象数组 POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数。
1 2 3 4 5 6 7 8 9 @RequestMapping("/listPojoParamForJson") @ResponseBody public String listPojoParamForJson (@RequestBody List<User> list) { System.out.println("list pojo(json)参数传递 list ==> " +list); return "{'module':'list pojo for json param'}" ; }
@RequestBody与@RequestParam区别 区别: @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】 @RequestBody用于接收json数据【application/json】 应用: 后期开发中,发送json格式数据为主,@RequestBody应用较广。 如果发送非json格式数据,选用@RequestParam接收请求参数。 日期类型参数传递 代码演示 日期类型数据基于系统不同格式也不尽相同: 2088-08-18 2088/08/18 08/18/2088 接收形参时,根据不同的日期格式设置不同的接收方式。
1 2 3 4 5 6 7 8 9 10 11 12 @RequestMapping("/dataParam") @ResponseBody public String dataParam (Date date, @DateTimeFormat(pattern="yyyy-MM-dd") Date date1, @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2) { System.out.println("参数传递 date ==> " +date); System.out.println("参数传递 date1(yyyy-MM-dd) ==> " +date1); System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> " +date2); return "{'module':'data param'}" ; }
名称:@DateTimeFormat
类型:形参注解
位置:SpringMVC控制器方法形参前面。
作用:设定日期时间型数据格式。
属性:pattern:指定日期时间格式字符串。
工作原理 1 2 3 4 public interface Converter <S, T> { @Nullable T convert (S var1) ; }
请求参数年龄数据(String→Integer) json数据转对象(json → POJO) 日期格式转换(String → Date) 注意事项:
传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。
响应 响应页面 1 2 3 4 5 6 7 8 9 10 11 @Controller public class UserController { @RequestMapping("/toJumpPage") public String toJumpPage () { System.out.println("跳转页面" ); return "page.jsp" ; } }
1 2 3 4 5 6 7 8 9 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h2>Hello Spring MVC!</h2> </body> </html>
文本数据 1 2 3 4 5 6 7 8 @RequestMapping("/toText") @ResponseBody public String toText () { System.out.println("返回纯文本数据" ); return "response text" ; }
json数据 1 2 3 4 5 6 7 8 9 10 11 @RequestMapping("/toJsonPOJO") @ResponseBody public User toJsonPOJO () { System.out.println("返回json对象数据" ); User user = new User (); user.setName("itcast" ); user.setAge(15 ); return user; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @RequestMapping("/toJsonList") @ResponseBody public List<User> toJsonList () { System.out.println("返回json集合数据" ); User user1 = new User (); user1.setName("传智播客" ); user1.setAge(15 ); User user2 = new User (); user2.setName("黑马程序员" ); user2.setAge(12 ); List<User> userList = new ArrayList <User>(); userList.add(user1); userList.add(user2); return userList; }
注意:需要添加jackson-databind依赖以及在SpringMvcConfig配置类上添加@EnableWebMvc注解。