SpringBoot注解--02---常用注解汇总

news2024/10/7 14:24:39

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 1.SpringBoot 配置启动注解
    • @SpringBootApplication
  • 2.Bean处理注解
    • 2.1 依赖注入
        • @AutoWired、@Qualifier、@Resource
    • 2.2 类被 Spring 容器创建,管理 ioc
        • @Component、@Service、@Controller、@Repository ==@RestController==
        • @RestController
    • 2.3 配置类 @Configuration、@Bean
    • 2.4 @Scope
  • 3.HTTP请求注解
        • @RequestMapping、@GetMapping、@PostMapping
    • 3.1 @RequestMapping
    • 3.2 @GetMapping
    • 3.3 @PostMapping
    • 3.4 @DeleteMapping
  • 4 前后端参数传递注解
        • @RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue
    • 4.1 @RequestParam
    • 4.2 @PathVariable
    • 4.3 @RequestBody
    • 4.4 @ @ResponseBody
    • 4.5 @RequestHeader
    • 4.6 @CookieValue
  • 5.读取配置注解
    • 5.1 @Value
    • 5.2 @ConfigurationProperties
    • 5.3 @PropertySource
    • 5.4 @Import
    • 5.5 @ImportResource导入xml配置文件
  • 6.参数校验注解
    • 6.1 参数解释
    • 6.2 @Valid 、@Validated
  • 7.统一异常处理注解
    • 7.1 @ControllerAdvice
    • 7.2 @ExceptionHandler
  • 8.JPA数据持久化注解
    • 8.1 @Entity 、@Table
    • 8.2 @Id、@Column
    • 8.3 @Transactional
  • 9.JSON格式处理注解
    • 9.1 @JsonIgnoreProperties、@JsonIgnore
    • 9.1 @JsonFormat
    • 9.4 @JsonUnwrapped
  • 10. 测试处理注解


1.SpringBoot 配置启动注解

在这里插入图片描述

@SpringBootApplication

包含@Configuration、@EnableAutoConfiguration、@ComponentScan通常用在主类上;
在这里插入图片描述

相关注解说明
@ComponentScan用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean,默认扫描范围是@ComponentScan注解所在配置类包及子包的类
@SpringBootConfiguration与@Configuration作用相同,都是用来声明当前类是一个配置类,这里表明是springboot主类使用的配置类
@EnableAutoConfiguration是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中

Spring Boot–02–自动装配原理

2.Bean处理注解

在这里插入图片描述

2.1 依赖注入

@AutoWired、@Qualifier、@Resource

这3个注解都是基于注解方式进行自动装配,在容器里面将查找到的bean返回,一般@AutoWired用得最多,@Qualifier则需要配合@AutoWired使用,@Resource则是可以通过名字进行自动装配

注解说明
@AutoWired@Autowired默认按类型装配,如果发现找到多个bean,则按照name方式比对,如果还有多个,则报出异常
@Qualifierspring的注解,按名字注入 一般当出现两个及以上bean时,不知道要注入哪个,结合@AutoWired使用
@Resource默认按名称注入例如@Resource(name = “zhaozhao”)则根据name属性注入找不到则报错,若无name属性则根据属性名称注入,如果匹配不成功则按照类型匹配匹配不成功则报错。

SpringBoot注解–03–@Resource与@Autowired用法区别

2.2 类被 Spring 容器创建,管理 ioc

@Component、@Service、@Controller、@Repository @RestController

这几个注解放在一起是因为功能基本一样的,都是将类注入到spring容器中,只不过它们使用的场景不同,被@Component,@Service,@Controller,@Repository注解标注的类,这些类会被纳入进spring容器中管理。

注解说明
@Repository持久层(dao)注入spring容器
@Service业务逻辑层(server)注入spring容器
@Controller控制层(controller)注入spring容器
@Component普通pojo注入spring容器
@RestController

该注解是@Controller和@ResponseBody的结合体,一般用于类,作用等于在类上面添加了@ResponseBody和@Controller

  • 区别在于标注后整个类所有方法将直接返回 JSON 数据,不再需要视图解析处理,目前前后端分离的项目后端都是直接用这个注解的;

在这里插入图片描述

2.3 配置类 @Configuration、@Bean

  • @Configuration作用于类上面,表明这是一个配置类
  • @Bean产生一个Bean对象加入Spring IOC容器

注意:@Configuration标注在类上,相当于把该类作为spring的xml配置文件中,作用为:配置spring容器(应用上下文)

注解说明
@Configuration作用于类上表示这是一个配置类,可理解为用spring的时候xml里面的< beans>标签
@Bean产生bean对象加入容器,作用于方法,可理解为用spring的时候xml里面的标签

在这里插入图片描述

2.4 @Scope

声明 Spring Bean 的作用域,作用于一共有以下几种:

  • singleton:唯一 bean 实例,Spring 中的 bean 默认都是单例的。

  • prototype:每次请求都会创建一个新的 bean 实例。

  • request:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP request 内有效。

  • session:每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。

3.HTTP请求注解

在这里插入图片描述

@RequestMapping、@GetMapping、@PostMapping

这3个注解功能也是类似的,通过这3个注解来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,用在方法上,可以通过配置的url进行访问

注解说明
@RequestMapping@RequestMapping(url),通过该注解就可以通过配置的url进行访问,方式可以是get或post请求,两种方式均可
@GetMapping@GetMapping(url) ,功能类似的,只是这个限定了只能是Get请求
@PostMapping@PostMapping(url),功能类似的,只是这个限定了只能是Post请求

3.1 @RequestMapping

  • 发起get请求或者post请求都可以

在这里插入图片描述

3.2 @GetMapping

  • 只能用get请求

在这里插入图片描述

3.3 @PostMapping

  • 只能发起post请求
    在这里插入图片描述

3.4 @DeleteMapping

DELETE 请求,从服务器删除特定的资源。

4 前后端参数传递注解

在这里插入图片描述

@RequestParam、@RequestBody、@PathVariable、@RequestHeader、@CookieValue

这3个注解放在一起主要是经常在控制层用来接收参数的

注解说明
@RequestParam获取查询参数。即url?name=这种形式
@PathVariable获取路径参数。即url/{id}这种形式
@RequestBody获取Body的参数,一般用于post获取参数
@ResponseBody表示该方法的返回结果直接写入 HTTP response body 中,而不会被解析为跳转路径
@RequestHeader获取请求头的信息
@CookieValue获取Cookie的信息

4.1 @RequestParam

  • @RequestParam主要用于接收url?后面的参数,get或post请求,只要后面的url?有参数都可以获取到对应的参数
  • @RequestParam 用在方法的参数前面,常用于获取请求中表单类型的key=value格式的数据。
@RestController
@RequestMapping("/api")
public class MyController {
    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name) {
        return "Hello, " + name + "!";
    }
 
    // ...
}

@RequestParam注解有几个比较重要的属性,required 表示是否必须,默认为 true,必须。defaultValue 可设置请求参数的默认值。value 为接收url的参数名(相当于key值)。

    @GetMapping("/requestParam")
    @ResponseBody
    public Map<String, String> requestParam(
            UserDto userDto,//通过一个实体类来接收,字段名必须一致
            @RequestParam(value = "id", required = false) String userId,
            @RequestParam(value = "name", required = false) String userName,
            @RequestParam(value = "pageIndex", required = true, defaultValue = "1") String pageIndex,
            @RequestParam(value = "pageSize", required = true, defaultValue = "5") String pageSize) {

        Map<String, String> map = new HashMap<>();
        map.put("userDto",userDto.toString());
        map.put("id", userId);
        map.put("name", userName);
        map.put("pageIndex", pageIndex);
        map.put("pageSize", pageSize);
        return map;
    }

在这里插入图片描述

4.2 @PathVariable

  • 该注解主要用于获取路径参数,像url/{id}/{name}这种形式的参数都可以,get获取post请求均可
    @PostMapping("/pathVariable/{id}/{name}")
    @ResponseBody
    public Map<String, String> pathVariable(
            @PathVariable(name = "id") String userId,
            @PathVariable(name = "name") String userName) {

        Map<String, String> map = new HashMap<>();
        map.put("id", userId);
        map.put("name", userName);
        return map;
    }

在这里插入图片描述

4.3 @RequestBody

  • 该注解用于获取请求体数据(body),get没有请求体,故而一般用于post请求
    @PostMapping("/test01")
    @ResponseBody
    public UserDto test01(@RequestBody UserDto userDto) {
        return userDto;
    }

    @PostMapping("/test02")
    @ResponseBody
    public String test02(@RequestBody String str) {
        return str;
    }

在这里插入图片描述
在这里插入图片描述

4.4 @ @ResponseBody

  • @ResponseBody可以作用在方法上或类上,表示该方法的返回结果直接写入 HTTP response body中,而不会被解析为跳转路径,即不会经过视图解析器,返回什么数据即在页面输入什么数据。

在这里插入图片描述

4.5 @RequestHeader

  • 获取请求头的信息
    @PostMapping("/requestHeader")
    @ResponseBody
    public String requestBody03(@RequestHeader(name = "Content-Type") String contentType){
        return contentType;
    }

在这里插入图片描述

4.6 @CookieValue

  • 获取Cookie的信息
@GetMapping("/demo3")
public void demo3(@RequestHeader(name = "myHeader") String myHeader,
        @CookieValue(name = "myCookie") String myCookie) {
    System.out.println("myHeader=" + myHeader);
    System.out.println("myCookie=" + myCookie);
}

5.读取配置注解

在这里插入图片描述

注解说明
@Value用于获取bean的属性,一般用于读取配置文件的数据,作用在变量上
@ConfigurationProperties用于注入Bean属性,然后再通过当前Bean获取注入值,作用在类上
@PropertySource用于指定要读取的配置文件,可以和@Value或@ConfigurationProperties配合使用

注意:@PropertySource不支持yml文件读取。

5.1 @Value

这里用yml配置文件进行演示,propres配置文件也是同样的效果,

  • 在application.yml配置文件里设置开发环境的的配置文件(dev),这样用@Value获取到的就是开发环境的配置文件的数据,切换成生产环境(pro)则获取到的是生产环境的数据
    在这里插入图片描述
    代码 这里使用pro环境
    在这里插入图片描述

5.2 @ConfigurationProperties

  • 该注解可以直接注入整个类的数据,作用于类

配置文件如下,这里使用pro环境
在这里插入图片描述
在这里插入图片描述

5.3 @PropertySource

  • 注意:@PropertySource不支持yml文件读取

配置文件如下:people.properties
在这里插入图片描述
测试
在这里插入图片描述
当然@PropertySource还可以和@Value配合使用,即一个一个注入值。

5.4 @Import

导入额外的配置信息

  • 功能类似XML配置的,用来导入配置类,可以导入带有@Configuration注解的配置类或实现了ImportSelector/ImportBeanDefinitionRegistrar。
    在这里插入图片描述
    在这里插入图片描述

5.5 @ImportResource导入xml配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.参数校验注解

在这里插入图片描述
JSR(Java Specification Requests) 是一套 JavaBean 参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们 JavaBean 的属性上面,这样就可以在需要校验的时候进行校验了,非常方便!

校验的时候我们实际用的是 Hibernate Validator 框架。Hibernate Validator 是 Hibernate 团队最初的数据校验框架,Hibernate Validator 4.x 是 Bean Validation 1.0(JSR 303)的参考实现,Hibernate Validator 5.x 是 Bean Validation 1.1(JSR 349)的参考实现,目前最新版的 Hibernate Validator 6.x 是 Bean Validation 2.0(JSR 380)的参考实现。

需要注意的是从 Spring Boot 2.3开始,我们还需要显式地添加 spring-boot-starter-validation 依赖项,在此之前的 Spring Boot 版本是在 spring-boot-starter-web 依赖项中包含的不需要额外引入。

6.1 参数解释

在这里插入图片描述

6.2 @Valid 、@Validated

SpringBoot注解–05–注解@Valid

SpringBoot注解–06–注解@Validated

创建request实体类

import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;

@Data
@NoArgsConstructor
public class TestRequest {

    @NotBlank(message = "name不为空")
    private String name;

    @Length(max = 3,message = "address最大长度是3")
    private String address;

    @Max(value = 5,message = "reqNo最大值是5")
    private String reqNo;

}


创建controller

@RestController
public class ValidTestController {

    @RequestMapping("/valid/test")
    public void test(@Valid @RequestBody TestRequest request){
        System.out.println(request);
    }


7.统一异常处理注解

在这里插入图片描述
异常处理通常也是我们在开发中一定要做的,因为不可能将一些程序员才能看懂的异常抛出到前端去(总会有不靠谱的同事忘记捕获异常的),所以一般都会加上统一的异常处理,在对用户不友好的错误堆栈转换为普通用户可以看懂的文案提示

7.1 @ControllerAdvice

  • 定义全局异常处理类,包含 @Component 所以可以被 Spring 扫描到。

7.2 @ExceptionHandler

  • 声明异常处理方法,表示遇到这个异常,就执行标注的方法。

在这里插入图片描述

8.JPA数据持久化注解

在这里插入图片描述
在这里插入图片描述

  • 上面是百度百科给的概念,只能说在实际项目开发中还是用的不多,大家还是喜欢用 Mybatis,不过相比更加简洁的技术还是要学习下的。

8.1 @Entity 、@Table

  • @Entity实体类注解
  • @Table(name =“数据库表名”),这个注解也注释在实体类上,对应数据库中相应的表。
  • @Id、@Column注解用于标注实体类中的字段,pk字段标注为@Id,其余@Column。

在这里插入图片描述

8.2 @Id、@Column

在这里插入图片描述
在这里插入图片描述

8.3 @Transactional

在这里插入图片描述

9.JSON格式处理注解

在这里插入图片描述

9.1 @JsonIgnoreProperties、@JsonIgnore

  • @JsonIgnoreProperties 作用在类上用于过滤掉特定字段不返回或者不解析。
  • @JsonIgnore一般用于类的属性上,作用和上面的@JsonIgnoreProperties 一样。
    在这里插入图片描述

9.1 @JsonFormat

  • @JsonFormat 格式化 json 数据
    在这里插入图片描述
    要注意的是,它只会在类似 @ResponseBody 返回 json 数据的时候,才会返回格式化的 yyyy-MM-dd HH:mm:ss 时间,你直接使用System.out.println()输出的话,仍然是类似 Fri Dec 01 21:05:20 CST 2017 这样的时间样式。
@Data
@Accessors(chain = true)
public class DateRangeVO {

    /**
     * 开始时间
     */
    @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN,timezone ="GMT+8")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN,timezone ="GMT+8")
    private LocalDateTime endTime;

    /**
     * 开始时间,毫秒时间戳 主要用于es查询
     */
    private Long startTimeMillion;

    /**
     * 结束时间,毫秒时间戳 主要用于es查询
     */
    private Long endTimeMillion;

    /**
     * 开始时间,秒时间戳 主要用于ada相关数据查询
     */
    private Long startTimeEpochSecond;

    /**
     * 结束时间,秒时间戳 主要用于ada相关数据查询
     */
    private Long endTimeEpochSecond;


}

在这里插入图片描述

9.4 @JsonUnwrapped

扁平化对象
在这里插入图片描述

未扁平化之前:
在这里插入图片描述
使用 @JsonUnwrapped 扁平对象之后:
在这里插入图片描述

10. 测试处理注解

在这里插入图片描述

  • @ActiveProfiles一般作用于测试类上, 用于声明生效的 Spring 配置文件。

  • @Test声明一个方法为测试方法。

  • @Transactional被声明的测试方法执行后数据会被回滚,避免污染测试数据。

  • @WithMockUser Spring Security 提供的,用来模拟一个真实用户,并且可以赋予权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1434214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ESP8266 开发板(MCU)遥控小车

遥控小车 ​ 遥控界面 ​ 【项目源码】 第一版ESP8266 https://github.com/liyinchigithub/esp8266_car_webServerhttps://github.com/liyinchigithub/esp8266_car_webServer 第二版ESP32 GitHub - liyinchigithub/esp32-wroom-car: 嵌入式单片机 ESP32 Arduino 遥控小车&a…

第16届大广赛命题详情它来啦!

“中国大学生创造力”全国大学生广告艺术竞赛&#xff08;以下简称&#xff1a;广播竞赛&#xff09;作为高水平三维生产教育一体化、科学教育一体化竞争平台&#xff0c;坚持高地位&#xff0c;基于大模式&#xff0c;在19年的发展过程中&#xff0c;坚持道德培养人才的基础&a…

MySQL温故篇(一)SQL语句基础

一、SQL语句基础 1、SQL语言分类 DDL&#xff1a;数据定义语言 DCL&#xff1a;数据控制语言 DML&#xff1a;数据操作语言 DQL&#xff1a;数据的查询语言 2、数据类型 3、字符类型 char(11) &#xff1a; 定长 的字符串类型,在存储字符串时&#xff0c;最大字符长度11个&a…

TypeError: wave.ensureState is not a function 水球图引入报错问题

TypeError: wave.ensureState is not a function 水球图引入报错问题 什么问题&#xff1f; 版本问题 echarts4.x 版本 适用于 echarts-liquidfill2.x.x版本 echarts5.x 版本 适用于 echarts-liquidfill3.x.x版本 完美解决

使用PDFBox实现pdf转其他图片格式

最近在做一个小项目&#xff0c;项目中有一个功能要把pdf格式的图片转换为其它格式&#xff0c;接下来看看用pdfbox来如何实现吧。 首先导入pdfbox相关依赖&#xff1a; <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</a…

【FPGA】快速学习路径

FPGA学习教程、功利式学习路径、以找工作为目的&#xff0c;早日入门FPGA_哔哩哔哩_bilibili

解决git切换分支导致代码丢失的问题

问题描述&#xff1a; 最近写项目时&#xff0c;我在主分支&#xff08;master分支&#xff09;上面写的代码&#xff0c;但是我没有提交&#xff08;Commit&#xff09;到Git上。但是又碰到一个新的需求&#xff0c;所以需要去新建一个分支&#xff0c;当我切换到新建的分支&a…

【C语言初阶-const作用详解】const修饰变量、const修饰指针(图文详解版)

少年&#xff0c;做你认为对的事 目录 少年&#xff0c;做你认为对的事 1.const修饰变量 2.const修饰指针&#xff08;重要&#xff09; 代码1&#xff1a; 代码2&#xff1a; 代码3&#xff1a; ​编辑 3.结论 1.const修饰变量 const修饰变量将变量赋予了常量属性…

SpringBoot Security安全认证框架初始化流程认证流程之源码分析

SpringBoot Security安全认证框架初始化流程&认证流程之源码分析 以RuoYi-Vue前后端分离版本为例分析SpringBoot Security安全认证框架初始化流程&认证流程的源码分析 目录 SpringBoot Security安全认证框架初始化流程&认证流程之源码分析一、SpringBoot Security安…

(源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模

本篇文章是: 2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模的源码版本,包含具体建模代码到生成模型步骤。那么废话不多说直接开始展示建模过程建模: 数据预处理 之前我给大家提供的一年的风暴数据是远远不够的,要做时…

CentOS镜像如何下载?在VMware中如何安装?

一、问题 CentOS镜像如何下载&#xff1f;在VMware中如何安装&#xff1f; 二、解决 1、CentOS镜像的下载 &#xff08;1&#xff09;官方网站 The CentOS Project &#xff08;2&#xff09;官方中文官网 CentOS 中文 官网 &#xff08;3&#xff09;选择CentOS Linux…

机器学习数据预处理方法(基本信息探索)##1

文章目录 基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09;数据解读与数据预处理数据质量探索变量相关性探索分析 基于Kaggle电信用户流失案例数据&#xff08;可在官网进行下载&#xff09; 数据解读与数据预处理 建议使用jupyter lab进行运行 imp…

新书速览|PyTorch 2.0深度学习从零开始学

实战中文情感分类、拼音汉字转化、中文文本分类、拼音汉字翻译、强化学习、语音唤醒、人脸识别 01 本书简介 本书以通俗易懂的方式介绍PyTorch深度学习基础理论&#xff0c;并以项目实战的形式详细介绍PyTorch框架的使用。为读者揭示PyTorch 2.0进行深度学习项目实战的核心技…

PPYOLE

1&#xff1a;参考GitHub - PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time multi-person keypoint detection. 2&#xff1a;开源项目 - 飞…

CPU vs GPU:不仅仅是一字之差

当今科学技术的飞速发展&#xff0c;社会已经迈入了信息时代的智能化阶段。人脸识别、智能客服、个性化推荐等应用已经深入到日常生活的各个方面。这些看得见的应用背后&#xff0c;是看不见的算力在默默地支撑着。在满足这些高算力需求的过程中&#xff0c;CPU 和 GPU 作为计算…

【Leetcode】第 383 场周赛

文章目录 100214. 边界上的蚂蚁题目思路代码结果 100204. 将单词恢复初始状态所需的最短时间 I题目思路代码结果 100189. 找出网格的区域平均强度题目思路代码结果 100203. 将单词恢复初始状态所需的最短时间 II题目思路代码结果 100214. 边界上的蚂蚁 题目 题目链接 给你一个…

Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传

文章目录 前言实现步骤引入maven依赖修改配置文件创建七牛云配置类创建文件操作服务类创建文件操作控制器前端实现运行效果 总结 前言 近日心血来潮想做一个开源项目&#xff0c;目标是做一款可以适配多端、功能完备的模板工程&#xff0c;包含后台管理系统和前台系统&#xf…

Unity3D实现项目限制功能(使用次数限制和时间限制)

系列文章目录 unity工具 文章目录 系列文章目录前言一、时间限制1-1、代码如下&#xff1a; 二、次数限制2-1、 在Unity项目中需要对注册表进行操作&#xff0c;还需要设置一下API兼容级别设置成 .NET Framework2-2、设置如下图 Player里面2-3、代码如下&#xff1a; 三、同时…

不负书香,传承有我

随着科技的飞速发展&#xff0c;电子书、网络资源日益丰富&#xff0c;但实体书仍以其独特的魅力和不可替代性在每个人的生活中占据一席之地。为确保每一本书都能被正确、有序地摆放&#xff0c;为每一个读者提供便利&#xff0c;在2024年1月24日&#xff0c;曲阜师范大学计算机…

光隔离探头

一、前言。 光隔离探头的CMRR比高压差分探头要高很多,在一些共模电压较高的测量领域用的比较多,如:开关电源、逆变器等。但是市面上介绍光隔离探头的方案比较少,这里简要说明一下我的个人想法。 二、数字光和模拟光。 数字光就是通信上常用的光模块,传的是数字信号,带…