当前位置:   article > 正文

SpringMVC(二):请求与响应、传参大解析_springmvc get请求传参

springmvc get请求传参

目录

一、请求映射路径

二、请求参数

三、五种类型参数传参

1、普通参数

2、pojo类型参数对象

3、嵌套POJO类型参数

4、数组类型参数

5、集合类型参数 

四、JSON数据参数传递

1、JSON数据参数介绍

2、传递json普通数组

3、传递json对象

4、传递json对象数组

五、日期类型参数传递

1、@DateTimeFormat注解介绍

2、工作原理

 六、响应

1、响应页面

2、响应文本数据

3、响应json数据


一、请求映射路径

@RequestMapping注解 

 名称:@RequestMapping

类型:==方法注解 类注解==

位置:SpringMVC控制器方法定义上方

作用:设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

范例:

  1. @Controller
  2. //类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
  3. @RequestMapping("/user")
  4. public class UserController {
  5. //请求路径映射
  6. @RequestMapping("/save") //此时save方法的访问路径是:/user/save
  7. @ResponseBody
  8. public String save(){
  9. System.out.println("user save ...");
  10. return "{'module':'user save'}";
  11. }
  12. }

二、请求参数

1、发送普通类型参数

(1)GET请求传递普通参数

普通参数:url地址传参,地址参数名与形参变量名相同,定义形参即可接收参数

  1. //普通参数:请求参数与形参名称对应即可完成参数传递
  2. @RequestMapping("/commonParam")
  3. @ResponseBody
  4. public String commonParam(String name ,int age){
  5. System.out.println(name);
  6. System.out.println(age);
  7. return "{'module':'common param'}";
  8. }

细节:如果传递的参数是中文,会出现中文乱码问题

原因:因为tomcat7版本没有封装解决办法,在8.5之后的请求就不会乱码

解决办法:在pom.xml添加tomcat7插件处配置UTF-8字符集,解决GET请求中文乱码问题

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.apache.tomcat.maven</groupId>
  5. <artifactId>tomcat7-maven-plugin</artifactId>
  6. <version>2.1</version>
  7. <configuration>
  8. <port>80</port><!--tomcat端口号-->
  9. <path>/</path> <!--虚拟目录-->
  10. <uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
  11. </configuration>
  12. </plugin>
  13. </plugins>
  14. </build>

(2)POST请求传递普通参数

普通参数:form表单post请求传参,表单参数名与形参变量名相同,定义形参即可接收参数

  1. //普通参数:请求参数与形参名称对应即可完成参数传递
  2. @RequestMapping("/commonParam")
  3. @ResponseBody
  4. public String commonParam(String name ,int age){
  5. System.out.println(name);
  6. System.out.println(age);
  7. return "{'module':'common param'}";
  8. }

细节:POST请求传递的参数如果包含中文就会出现乱码问题,说明我们之前配置的tomcat插件uri路径编解码字符集无法解决POST请求中文乱码问题

解决办法:

在加载SpringMVC配置的配置类中指定字符过滤器

  1. public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
  2. protected Class<?>[] getRootConfigClasses() {
  3. return new Class[0];
  4. }
  5. protected Class<?>[] getServletConfigClasses() {
  6. return new Class[]{SpringMvcConfig.class};
  7. }
  8. protected String[] getServletMappings() {
  9. return new String[]{"/"};
  10. }
  11. //乱码处理
  12. @Override
  13. protected Filter[] getServletFilters() {
  14. CharacterEncodingFilter filter = new CharacterEncodingFilter();
  15. filter.setEncoding("UTF-8");
  16. return new Filter[]{filter};
  17. }
  18. }

三、五种类型参数传参

1、普通参数

普通参数:当请求参数名与形参变量名不同,使用@RequestParam绑定参数关系

  1. //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
  2. @RequestMapping("/commonParamDifferentName")
  3. @ResponseBody
  4. public String commonParamDifferentName(@RequestParam("name") String userName , int age){
  5. System.out.println(userName);
  6. System.out.println(age);
  7. return "{'module':'common param different name'}";
  8. }

2、pojo类型参数对象

  • POJO参数:请求参数名与形参对象属性名相同,定义POJO类型形参即可接收参数

  1. public class User {
  2. private String name;
  3. private int age;
  4. //需要getter/setter/toString()方法
  5. }
  1. //POJO参数:请求参数与形参对象中的属性对应即可完成参数传递
  2. @RequestMapping("/pojoParam")
  3. @ResponseBody
  4. public String pojoParam(User user){
  5. System.out.println("pojo参数传递 user ==> "+user);
  6. return "{'module':'pojo param'}";
  7. }

注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装

3、嵌套POJO类型参数

         POJO对象中包含POJO对象

  1. public class User {
  2. private String name;
  3. private int age;
  4. private Address address;
  5. //同学们自己添加getter/setter/toString()方法
  6. }
  7. public class Address {
  8. private String province;
  9. private String city;
  10. private Address address;
  11. }

        嵌套POJO参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套POJO属性参数

  1. //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
  2. @RequestMapping("/pojoContainPojoParam")
  3. @ResponseBody
  4. public String pojoContainPojoParam(User user){
  5. System.out.println(user);
  6. return "{'module':'pojo contain pojo param'}";
  7. }

注意事项:请求参数key的名称要和POJO中属性的名称一致,否则无法封装

4、数组类型参数

      数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数

  1. //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
  2. @RequestMapping("/arrayParam")
  3. @ResponseBody
  4. public String arrayParam(String[] likes){
  5. System.out.println(Arrays.toString(likes));
  6. return "{'module':'array param'}";
  7. }

5、集合类型参数 

        集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam绑定参数关系

  1. //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
  2. @RequestMapping("/listParam")
  3. @ResponseBody
  4. public String listParam(@RequestParam List<String> likes){
  5. System.out.println(likes);
  6. return "{'module':'list param'}";
  7. }

四、JSON数据参数传递

1、JSON数据参数介绍

  • json普通数组(["","","",...])

  • json对象({key:value,key:value,...})

  • json对象数组([{key:value,...},{key:value,...}])

2、传递json普通数组

(1)添加json数组转换依赖

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-databind</artifactId>
  4. <version>2.9.0</version>
  5. </dependency>

(2)postman设置发送json数据

(3)开启自动转换json数据的支持

  1. @Configuration
  2. @ComponentScan("com.csdn.controller")
  3. //开启json数据类型自动转换
  4. @EnableWebMvc
  5. public class SpringMvcConfig {
  6. }

@EnableWebMvc注解功能强大,该注解整合了多个功能,json数据转换只是其中一个功能

(4)在Controller中编写方法接收json参数

  1. //集合参数:json格式
  2. //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3. //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的集合对象中作为数据
  4. @RequestMapping("/listParamForJson")
  5. @ResponseBody
  6. public String listParamForJson(@RequestBody List<String> likes){
  7. System.out.println(likes);
  8. return "{'module':'list common for json param'}";
  9. }

3、传递json对象

POJO参数:json数据与形参对象属性名相同,定义POJO类型形参即可接收参数

  1. //POJO参数:json格式
  2. //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3. //2.使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
  4. @RequestMapping("/pojoParamForJson")
  5. @ResponseBody
  6. public String pojoParamForJson(@RequestBody User user){
  7. System.out.println(user);
  8. return "{'module':'pojo for json param'}";
  9. }

4、传递json对象数组

POJO集合参数:json数组数据与集合泛型属性名相同,定义List类型形参即可接收参数

  1. //集合参数:json格式
  2. //1.开启json数据格式的自动转换,在配置类中开启@EnableWebMvc
  3. //2.使用@RequestBody注解将外部传递的json数组数据映射到形参的保存实体类对象的集合对象中,要求属性名称一一对应
  4. @RequestMapping("/listPojoParamForJson")
  5. @ResponseBody
  6. public String listPojoParamForJson(@RequestBody List<User> list){
  7. System.out.println(list);
  8. return "{'module':'list pojo for json param'}";
  9. }

五、日期类型参数传递

1、@DateTimeFormat注解介绍

- 名称:@DateTimeFormat
- 类型:==形参注解==
- 位置:SpringMVC控制器方法形参前面
- 作用:设定日期时间型数据格式

- 属性:pattern:指定日期时间格式字符串

  1. //日期参数 http://localhost:80/dataParam?date=2088/08/08&date1=2088-08-18&date2=2088/08/28 8:08:08
  2. //使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
  3. @RequestMapping("/dataParam")
  4. @ResponseBody
  5. public String dataParam(Date date,
  6. @DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
  7. @DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2){
  8. System.out.println("参数传递 date ==> "+date);
  9. System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
  10. System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
  11. return "{'module':'data param'}";
  12. }

2、工作原理

传递日期类型参数必须在配置类上使用@EnableWebMvc注解。其功能之一:根据类型匹配对应的类型转换器。

其内部依赖Converter接口

  1. public interface Converter<S, T> {
  2. @Nullable
  3. T convert(S var1);
  4. }
  • 请求参数年龄数据(String→Integer)

  • json数据转对象(json → POJO)

  • 日期格式转换(String → Date)

 六、响应

1、响应页面

  1. @Controller
  2. public class UserController {
  3. //响应页面/跳转页面
  4. //返回值为String类型,设置返回值为页面名称,即可实现页面跳转
  5. @RequestMapping("/toJumpPage")
  6. public String toJumpPage(){
  7. System.out.println("跳转页面");
  8. return "page.jsp";
  9. }
  10. }
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <h2>Hello Spring MVC!</h2>
  8. </body>
  9. </html>

2、响应文本数据

  1. //响应文本数据
  2. //返回值为String类型,设置返回值为任意字符串信息,即可实现返回指定字符串信息,需要依赖@ResponseBody注解
  3. @RequestMapping("/toText")
  4. @ResponseBody
  5. public String toText(){
  6. System.out.println("返回纯文本数据");
  7. return "response text";
  8. }

3、响应json数据

  1. //响应POJO对象
  2. //返回值为实体类对象,设置返回值为实体类类型,即可实现返回对应对象的json数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
  3. @RequestMapping("/toJsonPOJO")
  4. @ResponseBody
  5. public User toJsonPOJO(){
  6. System.out.println("返回json对象数据");
  7. User user = new User();
  8. user.setName("csdn");
  9. user.setAge(16);
  10. return user;
  11. }
  1. //响应POJO集合对象
  2. //返回值为集合对象,设置返回值为集合类型,即可实现返回对应集合的json数组数据,需要依赖@ResponseBody注解和@EnableWebMvc注解
  3. @RequestMapping("/toJsonList")
  4. @ResponseBody
  5. public List<User> toJsonList(){
  6. System.out.println("返回json集合数据");
  7. User user1 = new User();
  8. user1.setName("西死地嗯");
  9. user1.setAge(15);
  10. User user2 = new User();
  11. user2.setName("程序员");
  12. user2.setAge(12);
  13. List<User> userList = new ArrayList<User>();
  14. userList.add(user1);
  15. userList.add(user2);
  16. return userList;
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/431063
推荐阅读
相关标签
  

闽ICP备14008679号