api响应泛型参数 swagger_Spring Boot集成Swagger

Spring Boot集成Swagger

[TOC]

前言

为了完成项目自带文档的需求,花了一定的时间研究Spring Boot集成Swagger。看了官方文档和一些博客,差不多搭出一个比较通用的架子。

文末会分享出案例项目。

基本概述

本文使用Spring Boot+Spring Fox的方式集成Swagger框架。

案例

引入依赖

2.7.0io.springfox        springfox-swagger2        ${swagger.version}io.springfox        springfox-swagger-ui        ${swagger.version}

Swagger配置

@Configuration@EnableSwagger2public class SwaggerConfig {    @Bean    public Docket createRestApi() {        return new Docket(DocumentationType.SWAGGER_2)                .apiInfo(apiInfo())                .select()                .apis(RequestHandlerSelectors.basePackage("com.switchvov.swagger"))                .paths(PathSelectors.any())                .build()                .securitySchemes(securitySchemes())                .securityContexts(securityContexts());    }    /**     * 配置认证模式     */    private List securitySchemes() {        return newArrayList(new ApiKey("Authorization", "Authorization", "header"));    }    /**     * 配置认证上下文     */    private List securityContexts() {        return newArrayList(SecurityContext.builder()                .securityReferences(defaultAuth())                .forPaths(PathSelectors.any())                .build());    }    private List defaultAuth() {        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];        authorizationScopes[0] = authorizationScope;        return newArrayList(new SecurityReference("Authorization", authorizationScopes));    }    /**     * 项目信息     */    private ApiInfo apiInfo() {        return new ApiInfoBuilder()                .title("Swagger测试项目 RESTful APIs")                .version("1.0")                .build();    }}

配置方式

基本概述

Swagger官方Wiki 注解 swagger2常用注解说明 swagger注释API详细说明

PS:以上几篇文章已经将Swagger注解的使用方式及作用阐述的非常清楚了。这里只给出代码案例。

PS:springfox-swagger2:2.7.0已经支持泛型返回对象。 注意:千万不要在@ApiOperation注解里限定response(),让框架推断类型就行了。

控制器
@RestController@RequestMapping(value = "/user", produces = "application/json")@Api(value = "User", tags = {"User"}, description = "用户相关")public class UserController {    @Autowired    private UserService userService;    @GetMapping("/{id}")    @ApiOperation(value = "使用ID查询用户")    @ApiImplicitParams({            @ApiImplicitParam(value = "ID", name = "id", dataType = "int", paramType = "path", required = true, defaultValue = "1")    })    @ApiResponses({            @ApiResponse(code = 400, message = "请求参数有误"),            @ApiResponse(code = 401, message = "未授权"),            @ApiResponse(code = 403, message = "禁止访问"),            @ApiResponse(code = 404, message = "请求路径不存在"),            @ApiResponse(code = 500, message = "服务器内部错误")    })    public ResponseResult getById(@PathVariable("id") Integer id) {        User user = userService.getById(id);        return ResponseResult.successWithData(user);    }    @PostMapping("")    @ApiOperation(value = "创建用户")    @ApiResponses({            @ApiResponse(code = 400, message = "请求参数有误"),            @ApiResponse(code = 401, message = "未授权"),            @ApiResponse(code = 403, message = "禁止访问"),            @ApiResponse(code = 404, message = "请求路径不存在"),            @ApiResponse(code = 500, message = "服务器内部错误")    })    public ResponseResult createUser(@Validated @RequestBody User user) {        User dbUser = userService.createUser(user);        return ResponseResult.successWithData(dbUser);    }}
统一响应类
@ApiModel(description = "响应对象")public class ResponseResult {    private static final int SUCCESS_CODE = 0;    private static final String SUCCESS_MESSAGE = "成功";    @ApiModelProperty(value = "响应码", name = "code", required = true, example = "" + SUCCESS_CODE)    private int code;    @ApiModelProperty(value = "响应消息", name = "msg", required = true, example = SUCCESS_MESSAGE)    private String msg;    @ApiModelProperty(value = "响应数据", name = "data")    private T data;    // 省略get、set方法等等,详见源代码}
用户Model

PS:用户model使用了lombok、jpa、validator,只需要关注@Api开头的注解就行了。

@Data@Entity(name = "users")@ApiModel(description = "用户Model")public class User {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    @Null(message = "id必须为空")    @ApiModelProperty(value = "用户ID", name = "id")    private Integer id;    @Column    @NotBlank(message = "用户名不能为空")    @ApiModelProperty(value = "用户名", name = "username", required = true, example = "zhaoliu")    private String username;    @Column    @NotBlank(message = "密码不能为空")    @ApiModelProperty(value = "密码", name = "password", required = true, example = "123456")    private String password;}
文档界面
d38c96fe0f1238d8d4158bda7de8044d.png
72d26cddb924c42380ca4488898d8c25.png

源码

GitHub:swagger-demo

参考信息

  • SpringFox官网
  • Swagger官方Wiki 注解
  • Spring Boot中使用Swagger2构建强大的RESTful API文档
  • 第四章 springboot + swagger
  • Spring启动RESTful API文档使用Swagger 2
  • swagger2常用注解说明
  • swagger注释API详细说明
  • Swagger2 添加HTTP head参数
  • Swagger2 非全局、无需重复输入的Head参数(Token)配置

分享并记录所学所见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值