zoukankan      html  css  js  c++  java
  • SpringBoot配置swagger-ui可视化接口文档

    1.引入依赖

    <!--Swagger-ui 图形化接口-->
            <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>
     

    2.添加配置类

    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;
    
    // 启动时加载类
    @Configuration
    // 启用Swagger API文档
    @EnableSwagger2
    public class SwaggerConfig {
        @Bean
        public Docket api() {
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    // 自行修改为自己的包路径
                    .apis(RequestHandlerSelectors.basePackage("com.zp.springbootdemo.system.controller"))
                    .paths(PathSelectors.any())
                    .build();
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                    .title("客户管理")
                    .description("客户管理中心 API 1.0 操作文档")
                    .version("1.0")
                    .build();
        }
    }

    3.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("/user")
    public class UserController{
    }

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

    @ApiOperation 的使用

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

    属性名称备注
    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 扩展属性
    @ApiOperation(value = "/获取用户信息",notes = "根据id获取用户信息",httpMethod = "POST")
        @PostMapping("/getUser")
        public JSONObject getUser(@RequestBody JSONObject user){
    }
    @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 引用

    4.启动项目,进入API列表,查看地址:http://127.0.0.1:8080/swagger-ui.html

  • 相关阅读:
    “组织能力”到底是什么?zz
    《组织的进化》学习心得zz
    沟通管理:六步掌握沟通公式,避免“开口即跪”
    销售与营销区别
    美团张川:做了8年平台,我总结了平台的5道坎
    腾讯微视:向前一步是悲壮,向后一步是绝望zz
    Win server 2012 +IIS8.0下安装SSL证书
    无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失
    php: zend server 安装及相关配置
    android: 后台执行的定时任务
  • 原文地址:https://www.cnblogs.com/zhangpeng8888/p/12951580.html
Copyright © 2011-2022 走看看