赞
踩
目录
@RequestMapping注解
名称:@RequestMapping
类型:==方法注解 类注解==
位置:SpringMVC控制器方法定义上方
作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀
范例:
- @Controller
- //类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
- @RequestMapping("/user")
- public class UserController {
- //请求路径映射
- @RequestMapping("/save") //此时save方法的访问路径是:/user/save
- @ResponseBody
- public String save(){
- System.out.println("user save ...");
- return "{'module':'user save'}";
- }
- }
1、发送普通类型参数
(1)GET请求传递普通参数
普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数
- //普通参数:请求参数与形参名称对应即可完成参数传递
- @RequestMapping("/commonParam")
- @ResponseBody
- public String commonParam(String name ,int age){
- System.out.println(name);
- System.out.println(age);
- return "{'module':'common param'}";
- }
细节:如果传递的参数是中文,会出现中文乱码问题
原因:因为tomcat7版本没有封装解决办法,在8.5之后的请求就不会乱码
解决办法:在pom.xml添加tomcat7插件处配置UTF-8字符集,解决GET请求中文乱码问题
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.tomcat.maven</groupId>
- <artifactId>tomcat7-maven-plugin</artifactId>
- <version>2.1</version>
- <configuration>
- <port>80</port><!--tomcat端口号-->
- <path>/</path> <!--虚拟目录-->
- <uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
- </configuration>
- </plugin>
- </plugins>
- </build>
(2)POST请求传递普通参数
普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数
- //普通参数:请求参数与形参名称对应即可完成参数传递
- @RequestMapping("/commonParam")
- @ResponseBody
- public String commonParam(String name ,int age){
- System.out.println(name);
- System.out.println(age);
- return "{'module':'common param'}";
- }
细节:POST请求传递的参数如果包含中文就会出现乱码问题,说明我们之前配置的tomcat插件uri路径编解码字符集无法解决POST请求中文乱码问题
解决办法:
在加载SpringMVC配置的配置类中指定字符过滤器
- 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};
- }
- }
普通参数:当请求参数名与形参变量名不同,使用@RequestParam绑定参数关系
- //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
- @RequestMapping("/commonParamDifferentName")
- @ResponseBody
- public String commonParamDifferentName(@RequestParam("name") String userName , int age){
- System.out.println(userName);
- System.out.println(age);
- return "{'module':'common param different name'}";
- }
POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数
- public class User {
- private String name;
- private int age;
- //需要getter/setter/toString()方法
- }
- //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
- @RequestMapping("/pojoParam")
- @ResponseBody
- public String pojoParam(User user){
- System.out.println("pojo参数传递 user ==> "+user);
- return "{'module':'pojo param'}";
- }
注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装
POJO对象中包含POJO对象
- public class User {
- private String name;
- private int age;
- private Address address;
- //同学们自己添加getter/setter/toString()方法
- }
- public class Address {
- private String province;
- private String city;
- private Address address;
- }
嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数
- //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
- @RequestMapping("/pojoContainPojoParam")
- @ResponseBody
- public String pojoContainPojoParam(User user){
- System.out.println(user);
- return "{'module':'pojo contain pojo param'}";
- }
注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装
数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数
- //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
- @RequestMapping("/arrayParam")
- @ResponseBody
- public String arrayParam(String[] likes){
- System.out.println(Arrays.toString(likes));
- return "{'module':'array param'}";
- }
集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系
- //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
- @RequestMapping("/listParam")
- @ResponseBody
- public String listParam(@RequestParam List<String> likes){
- System.out.println(likes);
- return "{'module':'list param'}";
- }
json普通数组(["","","",...])
json对象({key:value,key:value,...})
json对象数组([{key:value,...},{key:value,...}])
(1)添加json数组转换依赖
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <version>2.9.0</version>
- </dependency>
(2)postman设置发送json数据
(3)开启自动转换json数据的支持
- @Configuration
- @ComponentScan("com.csdn.controller")
- //开启json数据类型自动转换
- @EnableWebMvc
- public class SpringMvcConfig {
- }
@EnableWebMvc注解功能强大,该注解整合了多个功能,json数据转换只是其中一个功能
(4)在Controller中编写方法接收json参数
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
- @RequestMapping("/listParamForJson")
- @ResponseBody
- public String listParamForJson(@RequestBody List<String> likes){
- System.out.println(likes);
- return "{'module':'list common for json param'}";
- }
POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数
- //POJO参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
- @RequestMapping("/pojoParamForJson")
- @ResponseBody
- public String pojoParamForJson(@RequestBody User user){
- System.out.println(user);
- return "{'module':'pojo for json param'}";
- }
POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数
- //集合参数:json格式
- //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
- //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
- @RequestMapping("/listPojoParamForJson")
- @ResponseBody
- public String listPojoParamForJson(@RequestBody List<User> list){
- System.out.println(list);
- return "{'module':'list pojo for json param'}";
- }
- 名称:@DateTimeFormat
- 类型:==形参注解==
- 位置:SpringMVC控制器方法形参前面
- 作用:设定日期时间型数据格式
- 属性:pattern:指定日期时间格式字符串
- //日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
- //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
- @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'}";
- }
传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。
其内部依赖Converter接口
- public interface Converter<S, T> {
- @Nullable
- T convert(S var1);
- }
请求参数年龄数据(String→Integer)
json数据转对象(json → POJO)
日期格式转换(String → Date)
- @Controller
- public class UserController {
-
- //响应页面/跳转页面
- //返回值为String类型,设置返回值为页面名称,即可实现页面跳转
- @RequestMapping("/toJumpPage")
- public String toJumpPage(){
- System.out.println("跳转页面");
- return "page.jsp";
- }
- }
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- <h2>Hello Spring MVC!</h2>
- </body>
- </html>
- //响应文本数据
- //返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解
- @RequestMapping("/toText")
- @ResponseBody
- public String toText(){
- System.out.println("返回纯文本数据");
- return "response text";
- }
- //响应POJO对象
- //返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
- @RequestMapping("/toJsonPOJO")
- @ResponseBody
- public User toJsonPOJO(){
- System.out.println("返回json对象数据");
- User user = new User();
- user.setName("csdn");
- user.setAge(16);
- return user;
- }
- //响应POJO集合对象
- //返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
- @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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。