Java阶段二Day21

news2025/1/13 10:59:20

Java阶段二Day21

文章目录

  • Java阶段二Day21
    • 整合Lombok基础组件
      • 1 Lombok简介
      • 2 安装和配置 Lombok
      • 3 Lombok 注解及其用法
        • 3.1 `@Getter` 和 `@Setter`
        • 3.2 `@ToString`
        • 3.3 `@AllArgsConstructor` 和 `@NoArgsConstructor`
        • 3.4 `@Data`
      • 4. 总结
      • 5 微博项目优化
    • Knife4j
      • 1 Knife4j的优点
      • 2 Knife4j快速上手
        • 2.1 pom.xml添加依赖
        • 2.2 配置Swagger的相关信息
        • 2.3 查看生成的接口文档
      • 3 常用注解应用分析
      • 4 限制请求方式
      • 5 导出离线API文档

整合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. 选择合适的文档格式,导出即可到本地磁盘

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

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

相关文章

使用Docker构建的MySQL主从架构:高可用性数据库解决方案

前言 MySQL主从架构&#xff0c;我们已经在vmware虚拟机上实践过了&#xff0c;接下来我们一起探讨在docker中如何使用MySQL主从架构。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社…

《论文阅读》基于提示的知识生成解决对话情感推理难题

《论文阅读》基于提示的知识生成解决对话情感推理难题 前言摘要作者新观点问题定义模型框架Global ModelLocal ModelPrompt Based Knowledge Generation分类器实验结果问题前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到失…

openEuler 成功适配 LeapFive InFive Poros 开发板

近日&#xff0c;openEuler RISC-V 23.03 创新版本在跃昉科技的 Poros 开发板上成功运行。 openEuler 在 Poros 上适配成功&#xff0c;XFCE 桌面启动正常&#xff0c;文件系统、终端模拟器和输入法等相关 GUI 应用也运行流畅&#xff0c;Chromium 浏览器和 LibreOffice 等应用…

【Pm4py第三讲】关于Output

本节用于介绍pm4py中的输出函数&#xff0c;包括日志输出、模型输出、面向对象日志输出等。 1.函数概述 本次主要介绍Pm4py中一些常见的输入函数&#xff0c;总览如下表&#xff1a; 函数名说明write_bpmn()用于写入bpmn模型write_dfg()用于写入dfg模型write_pnml() 用于写入p…

面试之高手回答

1.int与Integer的区别 int与Integer的区别有很多&#xff0c;我简单罗列三个方面 第一个作为成员变量来说Integer的初始值是null&#xff0c;int的初始值是0&#xff1b; 第二个Integer存储在堆内存&#xff0c;int类型是在直接存储在栈空间&#xff1b; 第三个integer是个对象…

项目管理6大避坑技巧

1、拒绝错位战略目标 明确目标方向 做项目&#xff0c;首先需要明确项目目标。项目中有很多目标都很重要&#xff0c;但只有一两个目标是最重要的。在任何时刻&#xff0c;我们主要精力都应该集中在一到两个最重要的目标上。 一般最重要的目标具有以下特点&#xff1a;能够给组…

CSS--空间转换及动画

01-空间转换 空间转换简介 空间&#xff1a;是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间&#xff0c;Z 轴位置与视线方向相同。空间转换也叫 3D转换属性&#xff1a;transform 平移 transform: translate3d(x, y, z); transform: translateX(); transfor…

能源硕士为何受热捧?社科院与杜兰大学能源管理硕士项目为你解惑

能源行业可谓是全球最具发展前景的行业之一&#xff0c;能源管理硕士更是近几年被争相推荐的“大热门”。广泛的就业选择、较高且稳定的收入&#xff0c;是该专业的特点之一&#xff0c;毕业后可选择在政府相关机构、能源监管部门、全国节能减排领域的各类研究机构工作&#xf…

Linux学习 Day3

目录 1. 时间相关的指令 2. cal指令 3. find指令&#xff1a;&#xff08;灰常重要&#xff09; -name 4. grep指令 5. zip/unzip指令 6. tar指令&#xff08;重要&#xff09;&#xff1a;打包/解包&#xff0c;不打开它&#xff0c;直接看内容 7. bc指令 8. uname –…

Shell基础学习---1、Shell概述、脚本入门、变量

1、Shell 概述 Shell是一个命令解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 说明&#xff1a;Shell是一个功能相当强大的编程语言&#xff0c;易编写&#xff0c;易调试、灵活性强。 1、 提供的Shell解释器 2、bash和sh的关系 3、CentOS…

简述-关于Kmeans轮廓系数随着聚类个数的增加后减少的问题

当我们在做Kmeans聚类的准备工作时&#xff0c;通常会用到手肘法&#xff08;elbow method&#xff09;或者轮廓系数&#xff08;silhouette score&#xff09;去找到最佳簇类个数。 对于轮廓系数寻找法&#xff0c;理论上来说&#xff0c;轮廓系数会随着聚类个数的增加而增加…

云渲染是什么?云渲染和传统渲染农场有什么区别?

云渲染是什么&#xff1f;云渲染和传统渲染农场有什么区别&#xff1f; 今天云渲染小编就来和大家说一说云渲染以及它和传统渲染农场的区别。 一、什么是云渲染&#xff1f;云渲染什么意思&#xff1f; 首先云渲染云渲染是一种依托于云计算的云端服务&#xff0c;用户将本地…

UVM 验证方法学之interface学习系列文章(七)高级 《bind 操作》(3)

在之前的文章,我们就bind 机制,进行了用法分析。其实,对于一些大型的复杂SOC设计,bind的操作,可以说是非常实用的。它不仅能够完成各种UVC的驱动激励操作,而且一定程度能够简便验证平台的搭建和后期维护。下面,我们举个例子说明bind在当今复杂环境下的妙用。 一 TB 思…

聊一聊API 测试有哪些不同类型?

用户希望能够跨设备和浏览器使用应用程序。因此&#xff0c;您必须进行全面的不同 API 测试类型&#xff0c;以了解它的工作情况以及它是否可以执行其主要功能。一些测试人员需要更多地关注这方面&#xff0c;因此&#xff0c;我们看到许多质量较差的应用程序。今天&#xff0c…

23. Unity - 3D游戏开发小计02 --- 动画结束UI、导航网格代理

1. 动画结束UI 一个游戏在通过后,都是需要一个界面显示当前游戏已经结束,即需要给游戏添加一个结束的界面,可以做一个简单的游戏结束界面,用一个图片展示: 首先在层级窗口添加两层UI中的Image,其中第一层的Image仅作背景,可将其填充颜色设置为纯黑色,第二层的Image添加…

消化道炎症 | 细菌蛋白酶失调的作用

谷禾健康 肠道蛋白酶 蛋白水解平衡失调通常与疾病有关。例如丝氨酸蛋白酶和基质金属蛋白酶参与多种生物过程&#xff0c;尤其是炎症反应。 胃肠道拥有数以万亿计的微生物&#xff0c;并暴露于高水平的蛋白酶。研究表明蛋白酶在维胃肠道稳态中的关键作用&#xff0c;它们的上调…

代搭建开发chatgpt

ChatGPT是由OpenAI开发的一款自然语言处理模型&#xff0c;而且它已经预训练好了。基于它开发ChatGPT应用程序需要以下步骤&#xff1a; 准备环境&#xff1a;安装Python3和相关的库&#xff0c;如TensorFlow、Keras等&#xff0c;并下载预训练的ChatGPT模型。 数据准备…

深度学习用于医学预后-第二课第三周8-13节-估计生存函数

上节课知道了数据中存在删失数据&#xff0c;那么我们如何利用这些数据建立生存函数。这将是本节课的重点内容。 文章目录 估计生存函数立即死亡还是永远存活生存概率介于两者之间使用删失数据条件概率的链式法则推导生存函数根据数据计算概率 估计生存函数 本节课&#xff0c;…

API安全性的要素与开发人员必修课测试

一、API安全性的要素主要包括以下几点&#xff1a; 1.身份验证和访问控制&#xff1a;API应该通过身份验证来验证请求的源&#xff0c;确保只有授权的用户或应用程序才能访问API。这可以通过使用API密钥、访问令牌、OAuth令牌或其他身份验证机制实现。 2.数据加密&#xff1a;A…

OpenCV中的图像处理3.9(七)轮廓线及其层次结构

目录 3.9.4 轮廓线&#xff1a;更多的功能目标理论和代码练习 3.9.5 轮廓线层次结构目标理论什么是层次结构&#xff1f;OpenCV中的层次结构表示法轮廓线检索模式 翻译及二次校对&#xff1a;cvtutorials.com 编辑者&#xff1a;廿瓶鲸&#xff08;和鲸社区Siby团队成员&#x…