SpringBoot||常用注解
00 分钟
2023-11-16
2024-6-10
type
status
date
slug
summary
tags
category
icon
password
URL

@Component(把普通pojo实例化到spring容器(组件)中,相当于配置文件中的 )——pojo下

    • Spring 2.5 中除了提供 @Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和 @Controller。
      在目前的 Spring 版本中,这 3 个注释和 @Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。——@Component不推荐使用。
  • @RestController (就不用跳视图了—不用页面的跳转时候使用)

RequestMapping(“/index”)【用于标注控制层,相当于struts中的action层,页面的跳转时候使用】

    • @GetMapping(用于处理请求方法的GET类型)
    • @ PostMapping(用于处理请求方法的POST类型等。)
  • 用于标注服务层,主要用来进行业务的逻辑处理
  • 用于标注数据访问层,也可以说用于标注数据访问组件,即DAO组件
  • 缺点,这样每个都要进行赋值,很麻烦_——所以一般用yaml
  • 通过 @Autowired的使用来消除 set ,get方法。
    • JSR303数据校验:这个就是我们可以在字段是增加一层过滤器验证,可以保证数据的合法性
    @Bean(明确地指示了一种方法,什么方法呢——产生一个bean的方法,并且**交给Spring容器管理**;)
      • @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。
      • 因为它很明确地告诉被注释的方法,你给我产生一个Bean,然后交给Spring容器,剩下的你就别管了
      @ResponseBody(作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。)
      • 注:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
      @PathVariable(“id”)——(不加这个注解,前端传入的数值将接收不到)
      • 自定义获取当前登录用户的注解
      @Resource 由jdk提供
      @Autowired 由spring提供
      @Autowired//默认按type注入
      @Qualifier(“cusInfoService”)//一般作为@Autowired()的修饰用,@Qualifier限定哪个bean应该被自动注入
      @Resource(name=“cusInfoService”)//默认按name注入,可以通过name和type属性进行选择性注入
      一般@Autowired和@Qualifier一起用,@Resource单独用。
      ——————————————————实体类entity中出现的注解
      @Column注解用来标识实体类中属性与数据表中字段的对应关系
      (2)@Column属性详解:
      name
      定义了被标注字段在数据库表中所对应字段的名称;
      unique
      表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。
      nullable
      表示该字段是否可以为null值,默认为true
      insertable
      表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。
      updatable
      表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。
      columnDefinition(大多数情况,几乎不用)
      表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)
      table
      表示当映射多个表时,指定表的表中的字段。默认值为主表的表名。
      length
      表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。
      precision和scale
      precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。
      在swagger中@ApiModelProperty()注解一般用于方法,属性的说明,常用属性如下:
      value–字段说明
      name–重写属性名字
      dataType–重写属性类型
      required–是否必填
      example–举例说明
      hidden–隐藏
      前端传过来数据的时候,要进行校验,但是大量的校验很繁琐,会造成大量的if else语句的产生,所以@Valid和@Validated很好的解决了这个问题.
      • Validated分组验证
      • @Validated的使用
      1.@NotNull:不能为null,但可以为空字符串
      2.@NotEmpty:不能为null,并且长度必须大于0
      3.@NotBlank:只能作用在String上,不能为null,而且调用trim()后,长度必须大于0
      转载于:https://www.cnblogs.com/thinkjava/p/7073599.html
      @Min 验证 NumberString 对象是否大等于指定的值
      @Max 验证 NumberString 对象是否小等于指定的值
      @Size(min=, max=) 验证对象(Array,Collection,Map,String)长度是否在给定的范围之内
      @Length(min=, max=) 验证字符串长度是否在给定的范围之内
      max和min是对你填的“数字”是否大于或小于指定值,这个“数字”可以是number或者string类型 字符串长度限制用length ————————————————实体类 版权声明:本文为CSDN博主「渡人既是渡己」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/kylin_tam/article/details/116276610
      入参格式化
      • 这时,就可以使用 Spring 的 @DateTimeFormat 注解格式化参数
      • @DateTimeFormat
      • 主要解决前端时间控件传值到后台接收准确的Date类属性的问题
      出参格式化
      • 调用接口的返回结果为:"date": "2018-08-01T14:25:31.296+0000"这个格式并不是我们想要的,那么如何将其进行格式化?这时就需要用到 jackson 的 @JsonFormat 注解
      • @JsonFormat
      • 主要解决后台从数据库中取出时间类型赋予java对象的Date属性值无法在前端以一定的日期格式来呈现 1 2
      @transient 就是在给某个javabean上需要添加个属性,但是这个属性你又不希望给存到数据库中去,仅仅是做个临时变量,用一下。不修改已经存在数据库的数据的数据结构。
      ———————————————————————数据访问层的实现类上
      声明式事务管理编程中使用的注解
      ———————————————————————业务逻辑层的实现类上
      • @Autowired和@Resource注解都是作为bean对象注入的时候使用的
      • 两者都可以声明在字段和setter方法上 总结:
      存在一个实现类都会注入进去,存在多个实现都会自动根据名称进行注入,只不过判断的先后顺序不同。
      @Resource 由jdk提供
      @Autowired 由spring提供
      @Autowired//默认按type注入
      @Qualifier(“cusInfoService”)//一般作为@Autowired()的修饰用
      @Resource(name=“cusInfoService”)//默认按name注入,可以通过name和type属性进行选择性注入
      一般@Autowired和@Qualifier一起用,@Resource单独用。
      当然没有冲突的话@Autowired也可以单独用
      ———————————————————————表示层上
      • @RestController (就不用跳视图了—不用页面的跳转时候使用)
      ###RequestMapping(“/index”)【用于标注控制层,相当于struts中的action层,页面的跳转时候使用】
        • @GetMapping(用于处理请求方法的GET类型)
        • @ PostMapping(用于处理请求方法的POST类型等。)
      是用在类上,表明是swagger资源,
      拥有两个属性:value、tags
      注:生成的api文档会根据tags分类,即这个controller中的所有接口生成的接口文档都会在tags这个list下;tags如果有多个值,会生成多个list,每个list都显示所有接口
      `@ApiOperation`
      value用于方法描述
      notes用于提示内容
      tags可以重新分组
      notion image
      @ApiImplicitParam:一个请求参数&&@ApiImplicitParams:用于包含多个 @ApiImplicitParam
      1. name :参数名。
      1. value : 参数的具体意义,作用。
      1. required : 参数是否必填。
      1. dataType :参数的数据类型。
      1. paramType :查询参数类型,这里有几种形式:
        1. path 以地址的形式提交数据
          query 直接跟参数完成自动映射赋值
          body 以流的形式提交 仅支持POST
          header 参数在request headers 里边提交
          form 以form表单的形式提交 仅支持POST
      • 被这个paramType坑过一次,在开发萌友智运APP的接口时,当发POST请求的时候,当时接受的整个参数,不论用body还是query,后台都会报Body Missing错误;这个参数和SpringMvc中的@RequestBody冲突,去掉paramType对接口测试并没有影响。
      @RequestParam
      作用:@RequestParam 常用来处理简单类型的绑定
      影响:不使用@RequestParam注解时,前端请求参数携带与不携带都能正常访问接口,只是接收的参数值为空而已,相当于@RequestParam的required的值是false一样,而在使用@RequestParam注解且为未说明required的值是false的时候,前端请求就必须携带参数,不然直接报错
      说明:这里的get和post方式将参数放入Params中都能进行访问
      @RequestBody
      作用:@RequestBody 适用于以POST为请求方式,请求参数以Json格式放在请求体中的前端请求,所以在使用@RequestBody接收数据时,一般都用POST方式进行提交,并将参数放以Json的格式放在请求体中。
      两者特点:当然在后端接口中,@RequestBody与@RequestParam()可以同时使用,但得注意@RequestBody最多只能有一个,而@RequestParam()可以有多个
      想要使用@ApiOperationSupport注解隐藏请求参数
      • 引入pom依赖
      • 在swaggerconfig中加@EnableKnife4j这个注解
      • 使用:在方法前直接使用该注解即可,注解中添加的参数就是需要请求时隐藏的参数
      为什么使用@Validated
      • 前端传过来数据的时候,要进行校验,但是大量的校验很繁琐,会造成大量的if else语句的产生
      @Validated的使用:
      1. 定义实体类,在要验证参数上加注解
        1. 在接口参数省添加@Validated注解
        notion image
        Validated分组验证看链接学习
        ———————————————————————Swagger的注解
        notion image
        @ApiImplicitParam注解【Swagger的注解】 添加链接描述
        java自定义一个获取当前登录用户的注解,如@CurrentUser,这样就不用每次request.getAttribute(“xxx”)这样获取了
        使用到的两个枚举
        ElementType枚举:
        TYPE //接口、类、枚举
        .FIELD //字段、枚举的常量
        METHOD //方法
        PARAMETER //方法参数
        CONSTRUCTOR //构造函数
        LOCAL_VARIABLE //局部变量
        ANNOTATION_TYPE //注解
        PACKAGE ///包
        RetentionPolicy枚举:
        SOURCE //注解在源码是有效,将被编译器丢弃
        CLASS //注解在编译时有效,但在运行时没有保留。这也是默认行为
        RUNTIME //运行时有效,并且可以通过反射获取
        流程:
        1. 自定义注解
        1. 自定义一个类,然后实现实现方法参数解析器HandlerMethodArgumentResolver,将request获取到的用户信息返回给我们的@CurrentUser注解【参见package org.cloud.extension.resolver;】
        1. 注意:如果是SpringMVC项目,则需要将参数解析器注册到HandlerAdapter中【最后在spring-mvc.xml中添加一个参数解析器bean来初始化我们自定义的类】
        1. 于是我们就可以在我们的controller中使用我们获取当前用户的注解@CurrentUser了
          1. notion image
        —————————————————————————日志类中
        @Log 自定义操作日志注解【如何自定义log注解,实现日志操作(切面编程)】
        有的同学在工作学习时常常遇到这样一个需求,就是进行对日志表的增删改查。记录用户的操作。啊,有的小伙伴说:这还不简单,一顿操作猛如虎,在每个方法下面都写上了insert语句。
        流程:
        一、在你的代码中加入一个Log注解类
        notion image
        一、枚举类 BusinessType (功能.例如是新增还是修改)&&枚举类 OperatorType(操作人类别)
        notion image
        二、新建CustomLogAspect类(重要)
        说明:下面这个类,可以完全复制。
        a.注意logPointCut :切入点 。
        b. handleLog:操作数据库。我这里记录的较详细。可根据您的需求进行增删。
        notion image
        三、写好上面的代码,您就可以在需要记录操作日志的方法上加上@Log注解,这样就可以对增加log日志啦!

        评论