Java阶段二Day21

Java阶段二Day21

整合Lombok基础组件

1 Lombok简介

​ Lombok 是一个 Java 库,可以通过在代码中添加注解来消除模板代码,以简化 Java 代码的编写过程。Lombok 支持自动生成 getter、setter、toString、equals、hashCode 和其他实用程序方法,减少了重复性的开发工作。

2 安装和配置 Lombok

  • pom.xml中引入 Lombok 的依赖

    <!--引入Lombok依赖-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    
  • 在Idea中确认是否安装Lombok 插件

    ​ 引入 Lombok 的依赖是让编译器能够找到 Lombok 提供的注解并对其进行处理,但是这不足以让 IDE 可以正常地识别和支持 Lombok 的注解。

    ​ 为了在 IDE 中正常地使用 Lombok,需要安装 IDE 插件来支持 Lombok 的注解。插件会将 Lombok 的注解转换为相应的代码,以便能够在 IDE 中正确地显示代码提示等功能。

    ​ 所以,为了使 Lombok 的注解在 IDE 中正常运行,需要同时引入 Lombok 的依赖并安装对应的 IDE 插件。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BR3iPF17-1684144161561)(./images/image-20230513165840143.png)]

    如果没有安装请安装此插件

    1. 打开 IntelliJ IDEA,点击 File -> Settings -> Plugins。

    2. 在搜索框中输入 lombok,并点击搜索按钮。

    3. 选择 Lombok 插件,点击 Install 按钮进行安装。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qOW0WVX4-1684144161562)(./images/lombok.png)]

    4. 安装完成后,弹出提示框,一般会提示重启 IntelliJ IDEA 以激活 Lombok 插件。点击 Restart IntelliJ IDEA 按钮进行重启。

    5. 重启后,即可使用 Lombok 注解。

3 Lombok 注解及其用法

Lombok 提供了许多注解,每个注解用来生成特定的代码块。下面是一些常用的注解:

3.1 @Getter@Setter

用来生成 getter 和 setter 方法。

@Getter
@Setter
public class Student {
    private String name;
    private int age;
}

这将自动生成 getName(), setName(), getAge(), setAge() 方法。

3.2 @ToString

用来生成 toString 方法。

@ToString
public class Student {
    private String name;
    private int age;
}

这将自动生成 toString() 方法。

3.3 @AllArgsConstructor@NoArgsConstructor

用来生成带参数的和无参的构造函数。

@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private String name;
    private int age;
}

这将自动生成一个有参构造函数和一个无参构造函数。

3.4 @Data

是一个组合的注解,它等价于同时使用了 @Getter@Setter@NoArgsConstructor@AllArgsConstructor@ToString 注解。

@Data
public class Student {
    private String name;
    private int age;
}

这将自动生成 getName(), setName(), getAge(), setAge(),有参构造函数、无参构造函数,以及 toString() 方法。

4. 总结

使用 Lombok 可以省略很多重复的代码,减少了 Java 开发的工作量。

5 微博项目优化

  • 在微博项目的所有pojo类中添加 @data 注解,将原来的 setter() getter() toString() 方法都去掉
  • 重启工程测试所有功能是否能够成功执行

Knife4j

​ Knife4j是基于springboot构建的一款Swagger接口文档生成工具,它可以让开发者在使用Swagger的同时,获得更好的使用体验。

1 Knife4j的优点

  • Knife4j 功能强大,易于操作。
  • Knife4j 的UI界面非常美观,使用非常流畅。
  • Knife4j 可以高度定制化,让其符合你的项目需求,提升用户体验。
  • Knife4j 的支持性比较好,可以满足大部分的开发需求。

2 Knife4j快速上手

2.1 pom.xml添加依赖

在你的SpringBoot项目的pom.xml文件中,添加如下依赖:

<!--添加Knife4j依赖-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
    <version>4.1.0</version>
</dependency>
2.2 配置Swagger的相关信息

工程目录下创建config.Knife4jConfig

package com.liner.weibo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;

@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfig {
    //配置Swagger2的Docket的Bean实例
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                // apiInfo():配置 API 的一些基本信息,比如:文档标题title,文档描述description,文档版本号version
                .apiInfo(apiInfo())
                // select():生成 API 文档的选择器,用于指定要生成哪些 API 文档
                .select()
                // apis():指定要生成哪个包下的 API 文档
                .apis(RequestHandlerSelectors.basePackage("cn.tedu.weibo.controller"))
                // paths():指定要生成哪个 URL 匹配模式下的 API 文档。这里使用 PathSelectors.any(),表示生成所有的 API 文档。
                .paths(PathSelectors.any())
                .build();
    }

    //文档信息配置
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题
                .title("微博项目")
                // 文档描述信息
                .description("微博项目在线API文档")
                // 文档版本号
                .version("1.0")
                .build();
    }
}

2.3 查看生成的接口文档

在 SpringBoot 项目启动后,访问 http://localhost:8080/doc.html 地址即可查看生成的Knife4j接口文档。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t8UWpdGT-1684144301916)(./images/image-20230513232832018.png)]

3 常用注解应用分析

  • @Api注解

    添加在控制器类上的注解,通过此注解的tags属性可以修改原本显示控制器类名称的位置的文本,通常,建议在配置的tags属性值上添加序号,例如:“01. 用户模块”、“02. 微博模块”,则框架会根据值进行排序。

    • 参数说明

      • tags:配置模块名称
    • 代码示例

      // 1. UserController
      @Api(tags = "01.用户管理模块")
      public class UserController {...}
      
      // 2. WeiboController
      @Api(tags = "02.微博管理模块")
      public class WeiboController {...}
      
      // 3. CommentController
      @Api(tags = "03.评论管理模块")
      public class CommentController {...}
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oR562FXW-1684144301917)(./images/image-20230513233544605.png)]

  • @ApiOperation注解

    添加在控制器类中处理请求的方法上的注解,用于配置此方法处理的请求在API文档中显示的文本。

    • 参数说明

      • value:配置业务名称
    • 代码示例

      此处以注册功能为例,其他所有方法请添加说明

      /**注册功能*/
      @RequestMapping("reg")
      @ApiOperation(value = "注册功能")
      public int reg(@RequestBody UserRegDTO userRegDTO){...}
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgM6tSiQ-1684144301918)(./images/image-20230513233843557.png)]

  • @ApiModelProperty注解

    是添加在POJO类的属性上的注解,用于对请求参数或响应结果中的某个属性进行说明,主要通过其value属性配置描述文本,并可通过example属性配置示例值。

    • 参数说明

      • value属性:配置参数名称
      • required属性:配置是否必须提交此请求参数
      • example属性:配置示例值

      注意:如果配置了 required=true,只是一种显示效果,Knife4j框架并不具备检查功能

    • 代码示例

      以注册功能UserRegDTO为例

      @Data
      public class UserRegDTO {
          @ApiModelProperty(value = "用户名", required = true, example = "赵丽颖")
          private String username;
          @ApiModelProperty(value = "密码", required = true)
          private String password;
          @ApiModelProperty(value = "昵称", required = true)
          private String nickname;
      }
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-geuB1k8y-1684144301919)(./images/image-20230513234309580.png)]

  • @ApiImplicitParam注解

    添加在控制器类中处理请求的方法上的注解,主要用于配置非封装的参数

    • 参数说明

      • name:指定参数名称(参数变量名
      • value:配置参数名称
      • dataType:配置数据类型
      • required:配置是否必须提交此请求参数
      • example:配置参数的示例值

      注意:一旦使用此注解,各个参数的数据类型默认都会显示String,可以通过dataType指定数据类型

    • 代码示例

      此处以微博详情功能为例

      @ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int")
      public WeiboDetailVO selectById(int id){...}
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hNuOQSyX-1684144301920)(./images/image-20230513234756279.png)]

  • @ApiImplicitParams注解

    添加在控制器类中处理请求的方法上的注解,当方法有多个非封装的参数时,在方法上添加此注解,并在注解内部通过@ApiImplicitParam数组配置多个参数。

    • 代码示例

      此处以微博详情功能为例

      /**微博详情页功能*/
      @GetMapping("selectById")
      @ApiOperation(value = "微博详情功能")
      @ApiImplicitParams(value = {
          @ApiImplicitParam(name = "id", value = "微博", required=true, dataType = "int"),
          @ApiImplicitParam(name = "username", value = "用户名", required=true)
      })
      // 额外增加username参数,仅仅用于测试
      public WeiboDetailVO selectById(int id, String username){
          return weiboMapper.selectById(id);
      }
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DtJGW8HP-1684144301921)(./images/image-20230513235042077.png)]

  • @ApiIgnore注解

    添加在处理请求的方法的参数上,用于表示API文档框架应该忽略此参数

    此处以发布微博功能的HttpSession参数为例

    • 代码示例

      // 参数中添加@ApiIgnore注解
      public int insert(@RequestBody WeiboDTO weiboDTO, @ApiIgnore HttpSession session){...}
      
    • 文档效果(重启工程并刷新页面:http://localhost:8080/doc.html#/home

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEExrMcd-1684144301922)(./images/image-20230513235508564.png)]

4 限制请求方式

API文档中默认每个功能会展示7种请求方式,遵循RESTful规则将 @RequestMapping 注解修改为对应请求方法的注解,比如:@GetMapping @PostMapping @PutMapping @DeleteMapping 注解,重启工程后刷新测试。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jIggkwOV-1684144301922)(./images/image-20230513235950837.png)]

5 导出离线API文档

  1. 文档管理 - 离线文档 中存在多种格式的导出格式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8oI4ss3u-1684144301923)(./images/image-20230514001342434.png)]

  2. 选择合适的文档格式,导出即可到本地磁盘

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天你学Java了吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值