• SpringMVC(二)响应


    一、设置请求映射路径

    当类上和方法上都添加了  @RequestMapping  注解,前端发送请求的时候,要和两个注解的 value 值相加匹配才能访问到
    1. @Controller
    2. //类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
    3. @RequestMapping("/user")
    4. public class UserController {
    5. //请求路径映射
    6. @RequestMapping("/save")
    7. @ResponseBody
    8. public String save(){
    9. System.out.println("user save ...");
    10. return "{'module':'user save'}";
    11. }
    12. //请求路径映射
    13. @RequestMapping("/delete")
    14. @ResponseBody
    15. public String delete(){
    16. System.out.println("user delete ...");
    17. return "{'module':'user delete'}";
    18. }
    19. }

    二、请求参数

    1. Get请求传参

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

    2. Post请求参数

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

    3. Post 中文请求乱码处理

    为web容器添加过滤器并指定字符集,Spring-web 包中提供了专用的字符过滤器

    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. 普通参数

    普通参数: url  地址传参,地址参数名与形参变量名相同,定义形参即可接收参数。
    如果形参与地址参数名不一致该如何解决 ?
    解决方案 : 使用  @RequestParam  注解
    1. //普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
    2. @RequestMapping("/commonParamDifferentName")
    3. @ResponseBody
    4. public String commonParamDifferentName(@RequestParam("name") String userName , int age){
    5. System.out.println("普通参数传递 userName ==> "+userName);
    6. System.out.println("普通参数传递 age ==> "+age);
    7. return "{'module':'common param different name'}";
    8. }

    2. POJO数据类型

    POJO  参数:请求参数名与形参对象属性名相同,定义  POJO  类型形参即可接收参数
    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. }
    注意 :
    POJO  参数接收,前端  GET  和  POST  发送请求数据的方式不变。
    请求参数 key 的名称要和 POJO 中属性的名称一致,否则无法封装。

    3. 嵌套POJO类型参数

    嵌套  POJO  参数:请求参数名与形参对象属性名相同,按照对象层次结构关系即可接收嵌套 POJO 属性参数
    1. //嵌套POJO参数:嵌套属性按照层次结构设定名称即可完成参数传递
    2. @RequestMapping("/pojoContainPojoParam")
    3. @ResponseBody
    4. public String pojoContainPojoParam(User user){
    5. System.out.println("pojo嵌套pojo参数传递 user ==> "+user);
    6. return "{'module':'pojo contain pojo param'}";
    7. }

    4. 数组类型参数

    数组参数:请求参数名与形参对象属性名相同且请求参数为多个,定义数组类型即可接收参数
    1. //数组参数:同名请求参数可以直接映射到对应名称的形参数组对象中
    2. @RequestMapping("/arrayParam")
    3. @ResponseBody
    4. public String arrayParam(String[] likes){
    5. System.out.println("数组参数传递 likes ==> "+ Arrays.toString(likes));
    6. return "{'module':'array param'}";
    7. }

    5. 集合类型参数

    集合保存普通参数:请求参数名与形参集合对象名相同且请求参数为多个,@RequestParam 绑定参数关系
    1. //集合参数:同名请求参数可以使用@RequestParam注解映射到对应名称的集合对象中作为数据
    2. @RequestMapping("/listParam")
    3. @ResponseBody
    4. public String listParam(@RequestParam List likes){
    5. System.out.println("集合参数传递 likes ==> "+ likes);
    6. return "{'module':'list param'}";
    7. }

    JSON数据传输参数

    1. JSON普通数组

    ①:添加json数据转换相关坐标

    ②:设置发送json数据(请求body中添加json数据) 

     ③:开启自动转换json数据的支持

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

    @EnableWebMvc 注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换

    ④:设置接收json数据

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

    2. JSON对象数据

    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("pojo(json)参数传递 user ==> "+user);
    8. return "{'module':'pojo for json param'}";
    9. }

    3. JSON对象数组

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

     五、@RequestBody@RequestParam区别

    (1)区别:
    1️⃣@RequestParam  用于接收  url  地址传参,表单传参【application/x-www-form-urlencoded
    2️⃣@RequestBody  用于接收  json  数据【 application/json
    (2)应用
    1️⃣后期开发中,发送 json 格式数据为主, @RequestBody 应用较广
    2️⃣如果发送非  json  格式数据,选用  @RequestParam  接收请求参数

    六、日期类型参数传递

    日期类型数据基于系统不同格式也不尽相同

    (1)2088-08-18

    (2)2088/08/18

    (3)08/18/2088

    接收形参时,根据不同的日期格式设置不同的接收方式
    1. //日期参数
    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. }
    类型转换器
    Converter 接口
    (1)请求参数年龄数据(String→Integer)
    (2)json数据转对象(json → POJO)
    (3)日期格式转换(String → Date)

     @EnableWebMvc功能之一:根据类型匹配对应的类型转换器

  • 相关阅读:
    Flink1.15源码解析--安全模块及安全上下文
    《向量数据库指南》——LlamaIndex 和 Milvus Cloud对于 Chat Towards Data Science 的作用
    【高项】- 进度管理论文
    SpringBoot+MyBatis和MyBatisPlus+vue+ElementUl实现批量删除 我只能说太简单了
    Go-Excelize API源码阅读(七)—— CopySheet(from, to int)
    Visual Studio 2019部署桌面exe(笔记)
    防止消息丢失与消息重复——Kafka可靠性分析及优化实践
    Conda Channel 介绍与配置
    系统结构设计原则、聚合与耦合
    陌生人真的会传授你赚钱的技能吗?
  • 原文地址:https://blog.csdn.net/yirenyuan/article/details/127763191