zoukankan      html  css  js  c++  java
  • SpringBoot整合Swagger-ui

    SpringBoot整合Swagger-ui

    1. 引入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    1. 添加配置类
    // 启动时加载类
    @Configuration
    // 启用Swagger API文档
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    // 自行修改为自己的包路径
                    .apis(RequestHandlerSelectors.basePackage("com.swagger.springbootswagger.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("客户管理")
                    .description("客户管理中心 API 1.0 操作文档")
                    //服务条款网址
                    .termsOfServiceUrl("https://www.cnblogs.com/wadmwz/")
                    .version("1.0")
                    .contact(new Contact("王智家园", "https://www.cnblogs.com/wadmwz/", "15713598138@sina.cn"))
                    .build();
        }
    
    }
    
    1. Swagger常用注解
    作用范围 API 使用位置
    协议集描述 @Api 用于 Controller 类上
    协议描述 @ApiOperation 用在 Controller 的方法上
    非对象参数集 @ApiImplicitParams 用在 Controller 的方法上
    非对象参数描述 @ApiImplicitParam 用在 @ApiImplicitParams 的方法里边
    响应集 @ApiResponses 用在 Controller 的方法上
    响应信息参数 @ApiResponse 用在 @ApiResponses 里边
    描述返回对象的意义 @ApiModel 用在返回对象类上
    对象属性 @ApiModelProperty 用在出入参数对象的字段上
    @Api的使用

    API作用在Controller,作为swagger文档资源,该注解将一个controller标注为一个Swagger资源(API). 在默认情况下,Swagger-Core 只会扫描解析具有 @Api 注解的类,而会自动忽略其他类别资源(JAX-RS endpoints、Servlets 等)的注解。

    @Api(value = "消息",description = "消息操作 API", position = 100, protocols = "http")
    @RestController
    @RequestMapping("message")
    public class MessageController {
    }
    

    启动项目,访问http://localhost:8080/swagger-ui.html#/message-controller 就可以看到效果,自动将MessageController内的方法都添加映射,并标明了每种方法的请求方式

    @ApiOperation 的使用

    ApiOperation 定义在方法上,描述方法名、方法解释、返回信息、标记等信息。

    @ApiOperation(
            value = "消息列表",
            notes = "完整的消息内容列表",
            produces = "application/json, application/xml",
            consumes = "application/json, application/xml",
            response = List.class
    )
    @GetMapping(value = "messages")
    public List<Message> list() {
        List<Message> messages = this.messageRepository.findAll();
        return messages;
    }
    
    属性名称 备注
    value url 的路径值
    tags 如果设置这个值,value 的值会被覆盖
    description 对 API 资源的描述
    produces For example, "application/json, application/xml"
    consumes For example, "application/json, application/xml"
    protocols Possible values: http, https, ws, wss
    authorizations 高级特性认证时配置
    hidden 配置为 true 将在文档中隐藏
    response 返回的对象
    responseContainer 这些对象是有效的 "List", "Set" or "Map",其他无效
    httpMethod "GET"、"HEAD"、"POST"、"PUT"、"DELETE"、"OPTIONS" and "PATCH"
    code http 的状态码 默认 200
    extensions 扩展属性
    @ApiImplicitParams 和 @ApiImplicitParam 的使用

    @ApiImplicitParams 用于描述方法的返回信息,和 @ApiImplicitParam 注解配合使用;@ApiImplicitParam 用来描述具体某一个参数的信息,包括参数的名称、类型、限制等信息。

    @ApiOperation(
            value = "添加信息",
            notes = "根据传递的参数创建信息"
    )
    @ApiImplicitParams({
            @ApiImplicitParam(name = "id", value = "消息ID", required = true, dataType = "Long", paramType = "query"),
            @ApiImplicitParam(name = "text", value = "消息正文", required = true, dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "summary", value = "摘要", required = false, dataType = "String", paramType = "query"),
    
    })
    @PostMapping(value = "message")
    public Message create(Message message) {
        message = this.messageRepository.save(message);
        return message;
    }
    
    属性名称 备注
    name 接收参数名
    value 接收参数的意义描述
    required 参数是否必填值为 true 或者 false
    dataType 参数的数据类型只作为标志说明,并没有实际验证
    paramType 查询参数类型,其值:
    path 以地址的形式提交数据
    query 直接跟参数完成自动映射赋
    body 以流的形式提交,仅支持 POST
    header 参数在 request headers 里边提交
    form 以 form 表单的形式提交 仅支持 POST
    @ApiResponses 和 @ApiResponse 的使用

    @ApiResponses 主要封装方法的返回信息和 @ApiResponse 配置起来使用,@ApiResponse 定义返回的具体信息包括返回码、返回信息等。

    @ApiOperation(value = "修改信息", notes = "根据参数修改信息")
    @ApiResponses({
            @ApiResponse(code = 100, message = "请求信息有误"),
            @ApiResponse(code = 101, message = "未授权"),
            @ApiResponse(code = 103, message = "禁止访问"),
            @ApiResponse(code = 104, message = "请求路径不存在"),
            @ApiResponse(code = 200, message = "服务器内部错误"),
    })
    @PutMapping(value = "message")
    public Message modify(Message message) {
        Message messageResult=this.messageRepository.update(message);
        return messageResult;
    }
    
    属性名称 备注
    code http 的状态码
    message 描述
    response 默认响应类 Void
    reference 参考
    responseHeaders 封装返回信息
    responseContainer 字符串
    @ApiModel 和 @ApiModelProperty 的使用

    在实际的项目中我们常常会封装一个对象作为返回值,@ApiModel 就是负责描述对象的信息,@ApiModelProperty 负责描述对象中属性的相关内容。

    @ApiModel(description = "响应对象")
    public class BaseResult<T> {
    
        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;
    
        private BaseResult(int code, String msg, T data) {
            this.code = code;
            this.msg = msg;
            this.data = data;
        }
    
        private BaseResult() {
            this(SUCCESS_CODE, SUCCESS_MESSAGE);
        }
    
        private BaseResult(int code, String msg) {
            this(code, msg, null);
        }
    
        private BaseResult(T data) {
            this(SUCCESS_CODE, SUCCESS_MESSAGE, data);
        }
    
        public static <T> BaseResult<T> success() {
            return new BaseResult<>();
        }
    
        public static <T> BaseResult<T> successWithData(T data) {
            return new BaseResult<>(data);
        }
    
        public static <T> BaseResult<T> failWithCodeAndMsg(int code, String msg) {
            return new BaseResult<>(code, msg, null);
        }
    
        public static <T> BaseResult<T> buildWithParam(ResponseParam param) {
            return new BaseResult<>(param.getCode(), param.getMsg(), null);
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
    
    
        public static class ResponseParam {
            private int code;
            private String msg;
    
            private ResponseParam(int code, String msg) {
                this.code = code;
                this.msg = msg;
            }
    
            public static ResponseParam buildParam(int code, String msg) {
                return new ResponseParam(code, msg);
            }
    
            public int getCode() {
                return code;
            }
    
            public void setCode(int code) {
                this.code = code;
            }
    
            public String getMsg() {
                return msg;
            }
    
            public void setMsg(String msg) {
                this.msg = msg;
            }
        }
    
    }
    

    @PatchMapping(value="/message/text")
    public BaseResult<Message> patch(Message message) {
        Message messageResult=this.messageRepository.updateText(message);
        return BaseResult.successWithData(messageResult);
    }
    
    属性名称 备注
    value 属性描述
    name 如果配置覆盖属性名称
    allowableValues 允许的值
    access 可以不配置
    notes 没有使用
    dataType 数据类型
    required 是否为必传参数
    position 显示的顺序位置
    hidden 是否因此
    example 举例
    readOnly 只读
    reference 引用

    源码请查看 : https://github.com/MissWangLove/SpringBoot

  • 相关阅读:
    分布式
    jdk与jre的区别
    rabbitmq
    dicom错误解决
    centos6.5搭建hadoop完整教程
    spark
    Oracle索引扫描
    Oracle的rowid结构解析
    PL/SQL — 集合及常用方法
    PL/SQL — 变长数组
  • 原文地址:https://www.cnblogs.com/wadmwz/p/10309339.html
Copyright © 2011-2022 走看看