SpringBoot项目常用注解

发布于:2022-07-26 ⋅ 阅读:(1012) ⋅ 点赞:(0)

SpringBoot项目常用注解

请求类型

  • @RequestMapping:

  • RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系

    RequestMapping注解可以作用在方法和类上

    作用在类上:第一级的访问目录

    作用在方法上:第二级的访问目录

    属性: path 指定请求路径的url,value value属性和path属性是一样的,mthod 指定该方法的请求方式

  • @GetMapping:@RequestMapping(method =RequestMethod.GET) 的一个快捷方式

  • @PostMapping:@RequestMapping(method =RequestMethod.POST) 的一个快捷方式

参数传递

Controller层使用

  • @RequestParam

    作用:把请求中的指定名称的参数传递给控制器中的形参赋值

    属性:

    1. value:请求参数中的名称

    2. required:请求参数中是否必须提供此参数,默认值是true,必须提供

    @Controller
    @RequestMapping("/dept")
    public class DeptController {
        @RequestMapping("/save")
        public String save(@RequestParam(value = "username",required = false) String name){
            System.out.println(name);
            return "suc";
        }
    }
    

    image-20220726104521429

  • @RequestBody

  • 作用:用于获取请求体的内容(注意:get方法不可以),项目中使用该注解接收的是一个实体类

    属性:required:是否必须有请求体,默认值是true

    @RequestMapping("/save2")
       public String save2(@RequestBody String body){
           System.out.println(body);
           return "suc";
       }
    
  • @PathVariable

  • 作用:URL占位符注解,将url中占位符参数绑定到入参,POST和GET均支持。属于RestFul风格

    image-20220726104610847

    @PostMapping("/list/{currentPage}/{pageSize}")
        public ResultJson index(@PathVariable Integer currentPage, @PathVariable Integer pageSize, @RequestBody PolicyCategory policyCategory) {
            QueryWrapper<PolicyCategory> queryWrapper = new QueryWrapper<>();
            if (StringUtils.isNotBlank(policyCategory.getName())) {
                queryWrapper.like("name", policyCategory.getName());
            }
            queryWrapper.eq("dic_policy_category.delete_flag", 0);
            IPage<PolicyCategory> pageList = policyCategoryService.page(new Page<>(currentPage, pageSize), queryWrapper);
            return ResultJson.ok(pageList);
        }
    

    请求路径:localhost:8080/v1/list/1/10

Mapper层使用

  • @Param

  • mapper中在参数前加,让xml的sql语句可以识别该参数,使用该参数就可以不用parameterType声明入参类型

    基础类型使用

    public Integer userNumberOfRegistrationsToday(@Param("comparisonTime") String comparisonTime);
    
    <select id="userNumberOfRegistrationsToday" parameterType="java.lang.String" resultType="java.lang.Integer">
            select count(*)
            from t_enterprise_user
            where create_time >= #{comparisonTime}
              and delete_flag = 0
        </select>
    

    对象参数使用

    @Param(“user”) User u

    xml中#{user.userName}

属性注入

@Autowired :spring提供的注解默认按类型进行自动装配(引用类型),不需要写值,IDEA可能存在误报(不影响实际使用)

@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

@Autowired () @Qualifier ( "baseDao" )
private BaseDao baseDao;

@Resource :Java提供的注解,也被支持。使用name属性,按名称注入,只能在引用类型中使用

如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

image-20220726110554891

权限控制、不可重复提交、版本控制

  • @PreAuthorize

  • PreAuthorize("hasAuthority('/enterprise')")
    

    通过判断集合中有没有该字段,判断是否有该权限

  • @NoRepeatSubmit

  • redis中防重复提交的注解,底层是利用redis的分布式锁完成,通过权限参数,来判断是否是同一个用户,是的话,就不允许发起操作

    image-20220726111005068

  • @ApiVersion

  • 加在类上,控制版本号,有些版本可以会增强新的功能,他们核心代码相同,保证多个版本可以同时运行

    @RequestMapping(“{version}/test”)

    image-20220726111233510

    前端的访问路径前缀

    ”/v1/test/....""
    

Bean管理

作用在类上,可以用来创建bean实例,把当前类注入到spring容器中

  • @Component 普通的类
  • @Controller 表现层
  • @Service 业务层
  • @Repository 持久层

本项目常用的是**@Controller 表现层在controller类上,@Service 业务层**在service实现类上

  • @RestController

  • @RestController是Controller的子集(孩子功能单一且强大),相当于requestbody+controller,把所有返回客户端的数据是json格式

实体类相关

Lombok注解

  • @Data

  • @Data 组合注解,包含get/set,tostring,equal和hashcode的方法

  • @Builder

  • 会生成一个全参构造方法

    因此就没有了无参构造方法,但当我们遇到需要无参构造方法时就会发生问题

    解决方法:加上@AllArgsConstructor注解:提供一个包含所有参数的构造函数

image-20220726112618897

MybatisPlus注解

  • @TableName

  • 类注解,定义在实体类上方,设置当前类对应于数据库表关系

    @TableName("t_test")
    
  • @TableField

  • 属性注解,定义类属性上方,设置当前属性对应的数据库表中的字段关系

    value(默认):设置数据库表字段名称

    exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用

    select:设置属性是否参与查询,此属性与select()映射配置不冲突

    fill:设置自动填充内容,默认值是:FieldFill.DEFAULT不处理。INSERT,插入时填充字段。UPDATE,更新时填充字段。INSERT_UPDATE,插入和更新时填充字段。

    image-20220726113948190

    image-20220726113501116

  • @TableId

  • 属性注解,定义表示主键的属性上方,value(默认):设置数据库表主键名称,type:设置主键属性的生成策略,值查照IdType的枚举值

    AUTO策略:让数据库ID自增

    image-20220726113759766

格式化数据注解

  • @JsonFormat

  • 定义类属性上方,只会在声明返回json时,比如(@ResponseBody)返回json数据时,才会返回格式化的数据

    Json返回给前端的时候,有时候数据类型是 BigDecimal 这种长度较大的类型

    而直接json化返回给前端的话,存在一个丢失精度的情况,因此,需要转换成String类型再返回给前端

    pattern:是你需要转换的格式

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
    

    image-20220726114539628

Excel相关

  • @Excel

  • 自定义的Excel注解,方便导出excel表格的时候,展示出来

    image-20220726114810103

    image-20220726114835955

日志相关

  • @Log

  • 注入一个日志类对象,自定义操作日志记录注解

    image-20220726145323416

  • @Slf4j

  • @Slf4j是用作日志输出的,作用到类上,开启后打印当前类日志

    image-20220726145420352

swagger的注解

  • @Api

  • 用在请求的类上,表示对类的说明

    tags=“说明该类的作用,可以在前台界面上看到的注解”
    value=“该参数无意义,在UI界面上看不到,不需要配置”

    image-20220726150905637

  • @ApiModelProerty

  • 用在属性上,表示对属性的说明,或者数据操作更改

    value–字段说明,name–重写属性名字

    image-20220726151020086

  • @ApiModel

  • 用在响应类上,表示一个返回响应数据的信息

    一般用在post 创建,使用@RequestBody的时候

    请求参数无法使用@ApiImplicitParam

  • @ApiResponses和@ApiResponse

  • @ApiResponses: 用在请求的方法上,表示一组响应

    @ApiResponse: 用在@ApiResponses 中,一般用于表达一个错误的响应信息,

    code: 数字代码
    message: 信息,例:“操作失败”
    response:抛出异常的类

  • @ApiImplicitParams和@ApiImplicitParam

  • @ApiImplicitParams:用在请求的方法上,表示一组参数说明
    @ApiImplicitParam: 用在@ApiImplicitParams 注解中,指定一个请求参数的各个方面

    name: 参数名
    value: 参数的说明、解释
    required: 是否必须传参
    paramType:参数放什么位置
    dataType: 参数类型,默认String,其它值dataType=“Integer”
    defaultValue: 参数的默认值

    /**
         *根据id查找企业
         * @param: id
         * @return
         */
        @PreAuthorize("hasAuthority('/enterprise/findById')")
        @ApiImplicitParams({@ApiImplicitParam(name = "Authorization", value = "Authorization token", required = true, dataType = "string", paramType = "header")})
        @GetMapping("/getById/{id}")
        public ResultJson getEnterpriseById(@PathVariable Long id) {
            Enterprise enterprise = enterpriseService.getById(id);
            return enterprise != null? ResultJson.ok(enterprise): ResultJson.failure(ResultCode.BAD_REQUEST);
        }
    

    这里的参数Authorization,可以用于**@NoRepeatSubmit**判断是否同一个用户,来完成不可重复提交

本文含有隐藏内容,请 开通VIP 后查看