• SpringMVC常用注解总结


    越学越乱,哎,根据用到的,按照用的顺序总结下吧

    首先放在最上面的就是@Controller用于声明这是个SpringBean

    类与方法上

    @Controller

    @Controller注解是开发中最常使用的注解,它的作用有两层含义:

    1. 告诉Spring,被该注解标注的类是一个Spring的Bean,需要被注入到Spring的上下文环境中。
    2. 该类里面所有被RequestMapping标注的注解都是HTTP服务端点。

    和@Controller的作用类似的就是这个@RestController了

    例如:

    @Controller
    public class UserController {
    	......
    }
    
    • 1
    • 2
    • 3
    • 4

    @ResponseBody

    @ResponseBody修饰返回值,注解用于在HTTP的body中携带响应数据,默认是使用JSON的格式。如果不加该注解,spring响应字符串类型,是跳转到模板页面或jsp页面的开发模式。

    @ResponseBody用于将 Controller方法返回的对象, 通过HttpMessageConverter转换为指定格式后,写入到 Respons对象的 body数据区。

    @Responsebody注解将方法的返回结果直接 写入 Http 响应正文中,一般在异步获取数据时使用。在使用@RequestMapping 注解时, 返回值通常被解析为跳转路径,在加上@Responsebody 后返回结果就不会被解析为跳转 路径, 而是直接写入到 HTTP 响应正文中。

    @RequestMapping:

    @RequestMapping作用:该注解的作用就是设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀

    属性:

    参数说明
    method是让你指定请求的method的类型,比如常用的有get和post。
    value是指请求的实际地址,如果是多个地址就用{}来指定就可以啦。
    produces指定返回的内容类型,当request请求头中的Accept类型中包含指定的类型才可以返回的。
    consumes指定处理请求的提交内容类型,比如一些json、html、text等的类型。
    headers指定request中必须包含那些的headed值时,它才会用该方法处理请求的。
    params指定request中一定要有的参数值,它才会使用该方法处理请求。

    例如下面用法:

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

    小案例

    上面三个注解的综合应用如下所示:

    //定义表现层控制器bean
    @Controller
    @RequestMapping("/user")
    public class UserController {
        //设置映射路径为/save,即外部访问路径
        @RequestMapping("/save")
        //设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
        @ResponseBody
        public String save(){
            System.out.println("user save ...");
            return "{'info':'springmvc'}";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    我们请求:/user/save,就能返回{'info':'springmvc'}的json格式数据

    @PostMapping…

    method参数中可以配置其他的请求方式例如

    @RequestMapping(value = "/user", method = POST)
    
    • 1

    另外:还有其他四个Mapping注解可以直接说明请求方式,例如post

    @PostMapping(value = "/user")
    
    • 1

    上面代码中两种写法起到的是一样的效果,也就是PostMapping等同于@RequestMapping的method为POST的情况。

    同理:@GetMapping、@PutMapping、@DeleteMapping也都是简写的方式。

    @PostMapping
    @GetMapping
    @PutMapping
    @DeleteMapping
    
    • 1
    • 2
    • 3
    • 4

    这个在RESTful风格中应用较多,以后再讲

    @RestController

    @RestController相当于 @Controller+@ResponseBody。

    它有两个作用:

    1. 作为Controller的作用,将控制器类注入到Spring上下文环境,该类RequestMapping标注方法为HTTP服务端点。
    2. 作为ResponseBody的作用,请求响应默认使用的序列化方式是JSON,而不是跳转到jsp或模板页面

    (现在项目都是前后端分离了,除了一些特定需求,也基本不用返回页面了,所以一般就用 @RestController 替换 @Controller+@ResponseBody 了,方便)

    将上面案例改造一下,就可以写成:

    //定义表现层控制器bean,设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
    //使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
    @ResponseBody
    @RequestMapping("/user")
    public class UserController {
        //设置映射路径为/save,即外部访问路径
        @RequestMapping("/save")
        public String save(){
            System.out.println("user save ...");
            return "{'info':'springmvc'}";
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    参数上

    @RequestParam:

    作用:是将请求参数绑定到你的控制器的方法参数上,是Spring MVC中的接收普通参数的注解。

    属性:

    参数说明
    value请求参数中的名称。
    required请求参数是否必须提供参数,它的默认是true,意思是表示必须提供。

    例如下面代码:

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

    这样请求中的name参数就能接收到userName字符串对象中了,下面再用就用userName就行。

    PS:当然,如果你接收的对象名与传入参数的名相同,他能自动封装,不用写这个(或者请求参数key的名称和POJO中属性的名称一致,也能进行封装)

    @RequestBody:

    @RequestBody作用:用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到 Controller 方法的参数上。@RequestBody默认是使用JSON的格式

    属性:required,是否必须有请求体。它的默认值是true,在使用该注解时,值得注意的当为true时

    例如下面请求与代码:
    在这里插入图片描述

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

    这样就能接收到json类型的参数并且转化为相应的POJO

    那么我们之前不是用了 @RequestParam接收参数吗,为什么还来个body?

    这是因为在发展后期,也就是现在的前后端分离开发中,发送json格式数据为主,@RequestBody应用较广,下面我们来区分一下这两个大兄弟

    @RequestBody与@RequestParam区别

    区别

    • @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
    • @RequestBody用于接收json数据【application/json】

    应用

    • 前后端分离开发中,发送json格式数据为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数

    @DateTimeFormat

    例如下面传的日期类型数据,基于系统不同格式也不尽相同

    2058-08-18
    2058/08/18
    08/18/2058
    
    • 1
    • 2
    • 3

    那么我们怎么接收呢?接收后怎么处理成统一格式呢?

    这就要用到我们的@DateTimeFormat注解,作用:接收形参时,根据不同的日期格式设置不同的接收方式,简单来说就是可以设定日期时间型数据格式

    例如下面请求与代码示例:

    http://localhost:80/dataParam?date=2058/08/08&date1=2058-08-18&date2=2058/08/28 8:08:08
    
    • 1

    controller代码如下:

    //使用@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'}";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    打印出来默认是的yyyy/MM/dd格式,其他均是设定的格式

    @PathVaribale:

    作用:作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应。

    在这里插入图片描述

    它是Spring MVC支持的REST风格url的一个重要的标志。

    @RequestBody、@RequestParam、@PathVariable区别和应用

    区别

    • @RequestParam用于接收url地址传参或表单传参
    • @RequestBody用于接收json数据
    • @PathVariable用于接收路径参数,使用{参数名称}描述路径参数

    应用

    • 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
    • 如果发送非json格式数据,选用@RequestParam接收请求参数
    • 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
  • 相关阅读:
    【力扣】300. 最长递增子序列 <动态规划>
    导入发运地点wsh_locations
    基于PyTorch的flappy bird游戏
    java开发环境安装-202209
    图数据库|基于 Nebula Graph 的 BetweennessCentrality 算法
    2022宁夏杯大学生就业问题分析
    153-Vue中的vuex内的辅助函数——mapState,mapGetters,mapMutations,mapActions的用法
    让iframe为项目增加更多可能性
    MyBatis学习笔记(一)
    【java学习—十五】创建多线程的两种方式(2)
  • 原文地址:https://blog.csdn.net/weixin_45525272/article/details/126071472