swagger2整合并不是那么随便

简介: swagger2整合并不是那么随便


image.png

 在前后联调时,一个高质量的接口文档工具是必不可少的。否则就会出现前后台人员不停的来回沟通的现象,浪费大量的时间。在大多数企业的接口文档使用的都是swaager,可能唯一的缺陷就是ui样式不是特别给力。但是有大量的增强性工具可以使用,如yapi,其中支持swagger导出文件的展示。

如果选择其他接口文档工具,可能对比swagger有缺失。请谨慎选择。

博主在公司规定定义时,规定入参值与返回值均为实体类,不允许使用其他基本类型的封装类型。以下使用均在此前提。这里就面临这get请求的问题,如果有兴趣可以接续往下看。

1.整合springboot

1.pom文件新增

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>

2.新增config文件

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //controller包
                .apis(RequestHandlerSelectors.basePackage("com.airboot.bootdemo.controller"))
                .paths(PathSelectors.any())
                .build();
    }
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("文档标题")
                .description("文档描述")
                .termsOfServiceUrl("http://blog.csdn.net/saytime")
                .version("1.0")
                .build();
    }
}

3.application中添加注解

这里需要添加增加@EnableSwagger2注解。

@SpringBootApplication
@EnableSwagger2
public class BootdemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootdemoApplication.class, args);
    }
}

以上步骤完成后,就可以使用了,可以访问http://localhost:[端口]/swagger-ui.html#/

附上文件结构

2.接口使用swagger2

1.修改实体类

如果需要返回的实体类带中文名称需要以下配置。

@ApiModel(value="DemoVO",description="对象")
public class DemoVO {
    private static final long serialVersionUID = -1L;
    /**
     * 城市编号
     */
    @ApiModelProperty(value="id",name="id")
    private Long id;
    /**
     * 省份编号
     */
    @ApiModelProperty(value="省份编号",name="省份编号")
    private Long provinceId;
    /**
     * 城市名称
     */
    @ApiModelProperty(value="城市名称",name="城市名称")
    private String cityName;
    /**
     * 描述
     */
    @ApiModelProperty(value="描述",name="描述")
    private String description;

2.修改接口

1.入参为String出参为List

此种方式在博主公司不允许出现。

/**
     * 通过参数查询(多个入参)
     *
     * @return
     */
    @RequestMapping(value = "/selectDemoByParas", method = RequestMethod.GET)
    @ApiOperation(value = "查询城市信息", notes = "根据入参查询城市demo(入参为Long)")//notes 描述
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "主键", required = true, dataType = "Long", paramType = "path"), //required 是否必填,dataType入参类型
            @ApiImplicitParam(name = "provinceId", value = "省份id", required = false, dataType = "Long", paramType = "path")
    })
    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "成功"),
            @ApiResponse(code = 400, message = "参数格式错误"),
            @ApiResponse(code = 401, message = "登录错误"),
            @ApiResponse(code = 404, message = "未找到地址"),
            @ApiResponse(code = 500, message = "服务器错误")}
    )
    public List<DemoVO> selectDemoByParas(@RequestParam("id") Long id, @RequestParam("provinceId") Long provinceId) {
        DemoVO inputVO = new DemoVO();
        inputVO.setId(id);
        return demoService.selectDemoVO(inputVO);
    }

image.png

以上是文档效果,同时respones class下的model和model schema可以更换返回对象样式。

可以通过try it out测试接口 同时可以切换显示注释的中文名称和json格式。

2.入参为实体,出参为list

1.post方式
@RequestMapping(value = "/selectDemoByVo", method = RequestMethod.POST)
    @ApiOperation(value = "查询城市信息", notes = "根据入参查询城市demo")
    //入参是pojo有三种方法
    //1.@ApiParam
    //2.@ApiImplicitParam(name = "demoVO", value = "入参为VO", required = false, dataType = "DemoVO") 
    //3.@ApiImplicitParams({
            //@ApiImplicitParam(name = "id", value = "主键", required = true, dataType = "Long", paramType = "path"),
            //@ApiImplicitParam(name = "provinceId", value = "省份id", required = false, dataType = "Long", paramType = "path")
    //})
    //!!!!但是建议使用@ApiParam 这样可以显示出入参格式和中文名称 如例
    public List<DemoVO> selectDemoByVo(@RequestBody @ApiParam(name = "用户对象", value = "传入json格式", required = true) DemoVO demoVO) {
        return demoService.selectDemoVO(demoVO);
    }
2.get方式
@Log(operationName = "机构部门-查询工作组用户")
@GetMapping("/selectWorkSysUser")
@ApiOperation(value = "通过实体查询用户", notes = "通过实体查询用户")
public Result<List<SysUserVO>>
selectWorkSysUser(@ApiParam(name = "入参对象", value = "实体", required = false) SysUserVO sysSysUserVO) throws TemplateException {
}

image.png

以上是效果,同时respones class和parameters都可以选择样式。

3.入参为List,出参为List

/**
     * 通过List查询
     *
     * @param demoVO
     * @return
     */
    @RequestMapping(value = "/selectDemoByList", method = RequestMethod.POST)
    @ApiOperation(value = "查询城市信息", notes = "根据入参查询城市demo")
    @ApiImplicitParam(name = "demoVO", value = "入参为List", required = false, dataType = "List<DemoVO>")
    public List<DemoVO> selectDemoByList(@RequestBody List<DemoVO> demoVO) {
        return demoService.selectDemoVO(demoVO.get(0));
    }

image.png

以上是效果,同以上相同

3.常用注解含义

    controller类使用
    @Api:修饰整个类,描述Controller的作用
    @ApiOperation:描述一个类的一个方法,或者说一个接口
    @ApiImplicitParams:多个请求参数(一个@ApiImplicitParams包括多个 
    @ApiImplicitParam)
    @ApiImplicitParam:一个请求参数
    @ApiResponses:HTTP响应整体描述(一个@ApiResponses包括多个@ApiResponse)
    @ApiResponse:HTTP响应其中1个描述
    @ApiIgnore:使用该注解忽略这个API
    @ApiError :发生错误返回的信息
    @ApiParam:单个参数描述
    实体类pojo使用
    @ApiModel:用对象来接收参数(pojo类使用)
    @ApiProperty:用对象接收参数时,描述对象的一个字段(pojo类的参数使用)


相关文章
|
Java
SpringBoot整合Swagger2管理文档的使用、汉化
SpringBoot整合Swagger2管理文档的使用、汉化
100 0
|
JSON IDE Java
无聊小知识.02 Springboot starter配置自动提示
Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?
158 1
无聊小知识.02 Springboot starter配置自动提示
|
安全 数据库 数据安全/隐私保护
SpringSecurity 快速实现项目
我的开发环境是springboot(下面简称sb)+freemarker+maven 如大家所知道的,sb里面没有配置文件,需要通过类加载或者解析xml来配置一些东西,这也是初学sb的一个头痛点。
1260 0
|
Java Windows
SpringBoot打包之后乱码
SpringBoot打包之后乱码
242 0
|
安全 Java 数据安全/隐私保护
SpringSecurity学习(一):SpringBoot整合SpringSecurity
SpringSecurity学习(一):SpringBoot整合SpringSecurity
238 0
SpringSecurity学习(一):SpringBoot整合SpringSecurity
|
3月前
|
Java Maven
maven项目的pom.xml文件常用标签使用介绍
第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
310 8
|
Java Maven
Maven配置不成功
配置了MAVEN_HOME,新建了java文件,在d:/java/MAVEN_HOME/apach....,path下输出%MAVEN_HOME%bin,为什么cmd下mvn不行呢?因为MAVEN_HOME最后多加了个分好,那么path下就是 d:/java/MAVEN_HOME/apache-maven-3.
1285 0
|
Java 应用服务中间件 Maven
maven配置
远程仓库的配置 在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他远程仓库中有,如JBoss Maven仓库。
1787 0
|
Oracle Java 关系型数据库
Maven配置
Maven配置
221 0

热门文章

最新文章