当前位置 : 主页 > 编程语言 > java >

Spring boot整合 Swagger2 以及遇到的坑

来源:互联网 收集:自由互联 发布时间:2022-09-02
版本一定要2.5.0以及以上版本! 网上博文大多数引的2.2.2版本的, 这个版本在demo中没有问题, 但是开发中你肯定会引别的插件. 2.2.2版本的与feign有冲突! 会报bean创建加载异常!??这是个坑不

版本一定要2.5.0以及以上版本! 网上博文大多数引的2.2.2版本的, 这个版本在demo中没有问题, 但是开发中你肯定会引别的插件.

2.2.2版本的与feign有冲突! 会报bean创建加载异常!??这是个坑不想网友们再遇到同样的错误.

-----------------------------------------------------------------------------------------------

二、Swagger2配置文件类:

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.EnableSwagger2;

/**

  • @ClassName: swagger2配置

  • @Description: TODO

  • @author 刘圈圈

  • @date 2018年7月5日

*/

@Configuration

@EnableSwagger2

public class Swagger2 {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("io.sr.modules.tra.app"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("旅游用车 APIs")

.description("--------------------------------")

.termsOfServiceUrl("https://blog.csdn.net/ityqing")

.contact("刘圈圈")

.version("0.1.1")

.build();

}

}

这个类要和启动类放在同一个目录下,?

用@Configuration注解该类,等价于XML中配置beans;用@Bean标注方法等价于XML中配置bean。

Application.class 加上注解@EnableSwagger2 表示开启Swagger,也可以在配置文件上加@EnableSwagger2

-----------------------------------------------------------------------------------------------

我的包结构:

Spring boot整合 Swagger2 以及遇到的坑

.apis(RequestHandlerSelectors.basePackage("io.sr.modules.tra.app")) ?: 是设置扫描的包路径

io.sr.modules.tra.app 它是模糊匹配的,所以我们在创建包还有URL时要避免这种格式

result接口:

这一步不是必要的, 只要swagger扫描到@RestController注解的类就会按默认配置生成接口文档

三、controller代码:

@RestController

@RequestMapping("/user")

@Api(value = "Shop")

public class SpringBootController {

@ApiOperation(value = "获取helloWorld", notes = "简单SpringMVC请求")

@RequestMapping("/")

String home() {

return "HELLO WORLD";

}

@ApiOperation(value = "获得A+B", notes = "根据url的classNo和url的studentName获得请求参数的字符串相加,RestFul风格的请求")

@ApiImplicitParams({@ApiImplicitParam(name = "classNo", value = "班级编号", required = true, dataType = "String"),

})

@RequestMapping(value = "/class/{classNo}/to/{studentName}", method = RequestMethod.GET)

String world(@PathVariable("classNo") String classNo, @PathVariable("studentName") String studentName) {

return classNo + " " + studentName;

}

}

访问:[http://localhost:8080/swagger-ui.html#/](():

Spring boot整合 Swagger2 以及遇到的坑

四、Swagger注解

swagger通过注解表明该接口会生成文档,包括接口名、请求方法、参数、返回信息的等等。

Controller注解

  • @Api:修饰整个类,描述Controller的作用

  • @ApiOperation:描述一个类的一个方法,或者说一个接口

  • @ApiParam:单个参数描述

  • @ApiImplicitParam:一个请求参数

  • @ApiImplicitParams:多个请求参数

  • @ApiProperty:用对象接收参数时,描述对象的一个字段

  • @ApiResponse:HTTP响应其中1个描述

  • @ApiResponses:HTTP响应整体描述

  • @ApiIgnore:使用该注解忽略这个API

  • @ApiError :发生错误返回的信息

JavaBean注解

@ApiModel:用对象来接收参数(Javabean 类上的注解)

@ApiModelProperty 作用在javabean的属性上(基本数据类型,自定义数据类型都可)

| 作用范围 | API | 使用位置 |

| --- | --- | --- |

| 对象属性 | @ApiModelProperty | 用在出入参数对象的字段上 |

| 协议集描述 | @Api | 用于controller类上 |

| 协议描述 | @ApiOperation | 用在controller的方法上 |

| Response集 | @ApiResponses | 用在controller的方法上 |

| Response | @ApiResponse | 用在 @ApiResponses里边 |

| 非对象参数集 | @ApiImplicitParams | 用在controller的方法上 |

| 非对象参数描述 | @ApiImplicitParam | 用在@ApiImplicitParams的方法里边 |

| 描述返回对象的意义 | @ApiModel | 用在返回对象类上 |

@RequestMapping此注解的推荐配置?

value?

method?

produces

[](()示例:

@ApiOperation("信息软删除")

@ApiResponses({ @ApiResponse(code = CommonStatus.OK, message = "操作成功"),

@ApiResponse(code = CommonStatus.EXCEPTION, message = "服务器内部异常"),

@ApiResponse(code = CommonStatus.FORBIDDEN, message = "权限不足") })

@ApiImplicitParams({ @ApiImplicitParam(paramType = "query", dataType = "Long", name = "id", value = "信息id", required = true) })

@RequestMapping(value = "/remove.json", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

public RestfulProtocol remove(Long id) {

@ApiModelProperty(value = "标题")

private String title;

[](()@ApiImplicitParam

| 属性 | 取值 | 作用 |

| --- | --- | --- |

| paramType | | 查询参数类型 |

| | path | 以地址的形式提交数据 |

| | query | 直接跟参数完成自动映射赋值 |

| | body | 以流的形式提交 仅支持POST |

| | header | 参数在request headers 里边提交 |

| | form | 以form表单的形式提交 仅支持POST |

| dataType | | 参数的数据类型 只作为标志说明,并没有实际验证 |

| | Long | |

| | String | |

| name | | 接收参数名 |

| value | | 接收参数的意义描述 |

| required | | 参数是否必填 |

| | true | 必填 |

| | false | 非必填 |

| defaultValue | | 默认值 |

paramType 示例详解

path

@RequestMapping(value = "/findById1/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

@PathVariable(name = "id") Long id

网友评论