首页 > 编程语言 >[JAVA]SpringCloud集成Swagger

[JAVA]SpringCloud集成Swagger

时间:2024-12-04 13:59:13浏览次数:13  
标签:JAVA SpringCloud value public Result return Swagger id

一.什么是Swagger

官网:https://swagger.io/

swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RestFul风格的web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。

Swagger是一组开源项目,其中主要要项目如下:
(1)Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。
(2)Swagger-core: 用于Java/Scala的的Swagger实现。与JAX-RS(Jersey、Resteasy、CXF…)、Servlets和Play框架进行集成。
(3)Swagger-js: 用于JavaScript的Swagger实现。
(4)Swagger-node-express: Swagger模块,用于node.js的Express web应用框架。
(5)Swagger-ui:一个无依赖的HTML、JS和CSS集合,可以为Swagger兼容API动态生成优雅文档。
(6)Swagger-codegen:一个模板驱动引擎,通过分析用户Swagger资源声明以各种语言生成客户端代码。

二.SpringCloud集成Swagger

1.心间项目,导入Swagger依赖

<!-- SpringBoot Web -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--swagger依赖-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!--swagger ui-->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2.编写Swagger的配置文件

注意:SwaggerConfig可以指定根据注解或者包名扫描具体的API

@Configuration
@EnableSwagger2
public class Swagger2Config {
    /**
     * 创建API应用
     * apiInfo() 增加API相关信息
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     * 指定扫描的包路径来定义指定要建立API的目录。
     * @return
     */
    @Bean
    public Docket coreApiConfig(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(adminApiInfo())
                .groupName("adminApi")
                .select()
                //只显示admin下面的路径
                .paths(Predicates.and(PathSelectors.regex("/admin/.*")))
                .build();
    }

    private ApiInfo adminApiInfo(){
        return new ApiInfoBuilder()
                .title("尚融宝后台管理系统--api文档")
                .description("尚融宝后台管理系统接口描述")
                .version("1.0")
                .contact(new Contact("李燕茹","http://baidu.com","728831102@qq.com"))
                .build();
    }
}

3.认识自定义注解

(1)@Api:用在类上,说明该类的作用。
(2)@ApiOperation:注解来给API增加方法说明。
(3)@ApiParam:定义在参数上
(4)@ApiResponses:用于表示一组响应
(5)@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息

(6)@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)

(7)@ApiModelProperty:描述一个model的属性

(8)@ApiImplicitParams: 用在方法上包含一组参数说明。

(9)@ApiImplicitParam:用来注解来给方法入参增加说明。

4.添加注解的过程

(1)在控制层Controller中添加注解来描述接口信息如:

@Api("参数配置")
@Controller
@RequestMapping("/system/config")
public class ConfigController

(2)在方法中配置接口的标题信息

@ApiOperation("查询参数列表")
@ResponseBody
public TableDataInfo list(Config config)
{
	startPage();
	List<Config> list = configService.selectConfigList(config);
	return getDataTable(list);
}

5.注解使用案例

(1)实体类

(1)@ApiModel(value=“IntegralGrade对象”, description=“积分等级表”)
(2)@ApiModelProperty(value = “编号”)

//实体类
//entity的实体类中可以添加一些自定义设置
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="IntegralGrade对象", description="积分等级表")
public class IntegralGrade implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "编号")
      @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    @ApiModelProperty(value = "积分区间开始")
    private Integer integralStart;

    @ApiModelProperty(value = "积分区间结束")
    private Integer integralEnd;

    @ApiModelProperty(value = "借款额度")
    private BigDecimal borrowAmount;

    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty(value = "更新时间")
    private LocalDateTime updateTime;

    @ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)")
    @TableField("is_deleted")
    @TableLogic
    private Boolean deleted;
}

(2)Controller层

(1)@Api(value = “积分等级管理”)
加在类上
(2)@ApiOperation(value = “根据id删除积分等级”,notes = “逻辑删除”)
加在方法上
(3)@ApiParam(value = “数据id”,required = true,example = “1”)
加在方法参数上

//controler层
@RestController
@RequestMapping("/admin/integralGrade")
@Api(value = "积分等级管理")
public class IntegralGradeController {

    @Resource
    private IntegralGradeService integralGradeService;

    @GetMapping("/list")
    @ApiOperation("积分等级列表")
    public Result listAll(){
        List<IntegralGrade> list = integralGradeService.list();
        return Result.ok().data("list",list);
    }

    @DeleteMapping("/remove/{id}")
    @ApiOperation(value = "根据id删除积分等级",notes = "逻辑删除")
    public Result removeById(
        @ApiParam(value = "数据id",required = true,example = "1")
        @PathVariable Long id){
        boolean result = integralGradeService.removeById(id);
        if (result){
            return Result.ok().message("删除成功");
        }else {
            return Result.error().message("删除失败");
        }
    }

    @PostMapping("/save")
    @ApiOperation(value = "新增积分等级")
    public Result save(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
        boolean result = integralGradeService.save(integralGrade);
        if (result){
            return Result.ok().message("新增成功");
        }else {
            return Result.error().message("新增失败");
        }
    }

    @PutMapping("/updateById")
    @ApiOperation(value = "根据id修改积分等级")
    public Result updateById(@ApiParam(value = "积分等级对象",required = true) @RequestBody IntegralGrade integralGrade){
        boolean result = integralGradeService.updateById(integralGrade);
        if (result){
            return Result.ok().message("修改成功");
        }else {
            return Result.error().message("修改失败");
        }
    }

    @GetMapping("/getById/{id}")
    @ApiOperation(value = "根据id查询积分等级")
    public Result getById(@ApiParam(value = "数据id",required = true,example = "1") @PathVariable Long id){
        IntegralGrade result = integralGradeService.getById(id);
        if (result == null){
            return Result.error().message("查询失败");
        }else {
            return Result.ok().data("integralGrade",result);
        }
    }
}

6.页面访问效果

完成上述代码,启动程序,访问:http://localhost:8080/swagger-ui.html

 

 7.进行功能测试

点击try it out 可以测试接口

有一个需要注意的地方:Conntroller中定义的方法必须在@RequestMapper中显示的指定RequestMethod类型,否则SawggerUi会默认为全类型皆可访问, API列表中会生成7条项目。

三.拓展

1.Swagger的启用和禁用

可通过application.yml中的swagger.enable控制。为true时表示启用,为false时表示禁用。

为了系统安全,通常生产环境不建议开启swagger。

2.如何汉化系统接口Swagger

(1)找到m2/repository/io/springfox/springfox-swagger-ui/x.x.x/springfox-swagger-ui-x.x.x.jar
(2)修改对应springfox-swagger-ui-x.x.x.jar包内resources目录下swagger-ui.html,添加如下JS代码
 

<!-- 选择中文版 -->
<script src='webjars/springfox-swagger-ui/lang/translator.js' type='text/javascript'></script>
<script src='webjars/springfox-swagger-ui/lang/zh-cn.js' type='text/javascript'></script>

 (3)本地修改结束后,在覆盖压缩包文件重启就实现汉化了

标签:JAVA,SpringCloud,value,public,Result,return,Swagger,id
From: https://blog.csdn.net/weixin_66834439/article/details/144238536

相关文章

  • Java的4种访问修饰符的访问范围
    文章目录一、4种访问修饰符的访问范围1.同类2.同包3.不同包中的子类(1)同一个包下的子类和父类,子类继承父类访问修饰符的访问范围(不能访问pricvate)(2)不同包下的子类和父类,测试子类继承父类访问修饰符的访问范围(不能访问pricvate和默认)4.不同包大家已经知道,当用一个......
  • 洛谷P2670扫雷游戏(Java)
    三.P2670[NOIP2015普及组]扫雷游戏题目背景NOIP2015普及组T2题目描述扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有......
  • javabean重写equals和hashcode方法的作用
    Javabean重写equals()方法主要是为了实现自定义的对象比较。这个方法在Java集合框架和双列集合中扮演了关键角色;HashMap和HashSet底层原理是哈希表结构,依赖hashcode方法和equals方法保证键的唯一没有重写equals和hashcode方法:实体类比较的是地址值,map集合是根据地址值判断......
  • 【JavaScript】下拉框的实现
    什么是下拉框鼠标放到黑色盒子上才会显示下拉框中的内容,红色盒子是显示文本内容。蓝色盒子对外隐藏,鼠标放上去会将黑色盒子高度扩大。JavaScript获取元素的高度使用querySelector或者querySelectorAll获取元素,使用循环进行重复元素的选择,对元素的height属性进行修改。......
  • 网络编程(JavaEE)
    前言:    熟悉了网络的基本概念之后,接下来就需要针对网络进行一系列的编程,其中可能涉及到新的一些编程操作,需要我们进一步探索!网络编程套接字:    套接字其实是socket的翻译。    操作系统给应用程序(传输层给应用层)提供的API,起了个名字就叫socket......
  • HTML5期末考核大作业,个人网站—— 程序员个人简历模板下载HTML+CSS+JavaScript (2)
    ......
  • 全网最全情景,深入浅出解析JavaScript数组去重:数值与引用类型的全面攻略
    目录全网最全情景,深入浅出解析JavaScript数组去重:数值与引用类型的全面攻略一、引言:我们为什么需要关注数组去重?二、数值类去重1、使用Set去重2、遍历+includes()3、使用filter()和indexOf()4、使用reduce()5、嵌套数组去重:结合flat()三、引用类去重——去除......
  • 深入理解Java内存模型与线程
    Java内存模型(JMM)是为了屏蔽底层硬件和操作系统的差异,使得Java程序在各种平台上都能获得一致的内存访问效果。随着多线程的普及,理解JMM以及Java线程的实现至关重要。本文将详细解析Java内存模型、线程实现及其状态转换。1.硬件的效率与一致性由于计算机的处理器与内存速度差......
  • java: 不兼容的类型: java.lang.Long无法转换为java.lang.String
     1、异常提示: java:不兼容的类型:java.lang.Long无法转换为java.lang.String 2、原因分析: 长整型(Long)的数据无法转换为字符串型(String)的数据,请检查数据类型是否一致。 3、解决办法: 将被操作的变量的数据类型统一了,常见的解决办法有4中: 比如被操作的变量名为......
  • python、JAVA等多种语言演示免费获取股票数据(实时数据、历史数据、CDMA、KDJ等指标数
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......