Swagger使用教程

个人笔记,不喜勿喷

第一步:导依赖

    <!--swagger2的核心包-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <!--swagger2的ui界面包  底层用的thymeleaf-->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>

第二步:

配置类 :  SwaggerConfig 



import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi() {
        List<Parameter> pars = new ArrayList<>();
        pars.add(new ParameterBuilder()
                .name("token")
                .description("token")
                .required(false)
                .parameterType("header")
                .modelRef(new ModelRef("string"))
                .build()
        );
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                //对外暴露服务的包,以controller的方式暴露,所以就是controller的包.
                .apis(RequestHandlerSelectors.basePackage("cn.xia"))
                .paths(PathSelectors.any())
                .build().globalOperationParameters(pars);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("宠物乐园api")
                .description("宠物乐园接口文档说明")
                .contact(new Contact("tom", "", "tom@itsource.cn"))
                .version("1.0")
                .build();
    }
}

@Api: 用于类,标识这个类是swagger的资源
@ApiIgnore: 用于类,忽略该 Controller,指不对当前类做扫描
@ApiOperation: 用于方法,描述 Controller类中的 method接口
@ApiParam: 用于参数,单个参数描述,与 @ApiImplicitParam不同的是,他是写在参数左侧的。如( @ApiParam(name="username",value="用户名")Stringusername)
@ApiModel: 用于类,表示对类进行说明,用于参数用实体类接收
@ApiProperty:用于方法,字段,表示对model属性的说明或者数据操作更改
@ApiImplicitParam: 用于方法,表示单独的请求参数
@ApiImplicitParams: 用于方法,包含多个 @ApiImplicitParam
@ApiResponse: 用于方法,描述单个出参信息
@ApiResponses: 用于方法,包含多个@ApiResponse
@ApiError: 用于方法,接口错误所返回的信息

第三部:controller层加注解

@Api(value = "/",description = "登录相关的类2")----介绍该类
//ApiOperation ----用来介绍该接口的作用
//value  -- 参数的注解 
// required  --是否为必填项
//example  --举例说明

@ApiOperation("获取图形验证码接口")    
@GetMapping("/graphics/{imageCodeKey}")
public JSONResult getVerifyCode(@ApiParam(value = "注册手机号",required = true,example = "17596325874") @PathVariable("imageCodeKey") String key){
    String baseStr = iverifyCodeservice.getVerifyCode(key);
    //把返回的数据封装到JSONResult中,给页面
    log.info(baseStr);
    return JSONResult.success(baseStr);
}

如果你传入的是一个对象,并且想给对象的每一个字段加上注解

对象如下

/**
 * description -----对象描述
 * value     ------对象介绍
 * required ----  是否必填项
 * value   ----- 注解
 */
@ApiModel(description = "会员登录账号实体类",value = "会员登录账号对象")
public class User extends Model<User> {

    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(required = true,value = "id")
    private Long id;

    @TableField("create_time")
    @ApiModelProperty(required = true,value = "创建时间")
    private Long createTime;

    @TableField("update_time")
    @ApiModelProperty(required = true,value = "修改时间")
    private Long updateTime;
    /**
     * 三方登录名
     */
    @TableField("third_uid")
    @ApiModelProperty(required = true,value = "三方登录名")
    private String thirdUid;
    /**
     * 手机号
     */
    @ApiModelProperty(required = true,value = "电话")
    private String phone;
    /**
     * 邮箱
     */
    @ApiModelProperty(required = true,value = "邮箱")
    private String email;
    /**
     * 昵称
     */
    @ApiModelProperty(required = true,value = "昵称")
    @TableField("nick_name")
    private String nickName;
    /**
     * 用户状态
     */
    @ApiModelProperty(required = true,value = "用户状态")
    @TableField("bit_state")
    private Long bitState;
    /**
     * 安全级别
     */
    @ApiModelProperty(required = true,value = "安全级别")
    @TableField("sec_level")
    private Integer secLevel;

    @ApiModelProperty(required = true,value = "登录id")
    @TableField("login_id")
    private Long loginId;
}

接口如下

@ApiOperation("保存和修改公用的")
@RequestMapping(value="/save",method= RequestMethod.POST)
public JSONResult saveOrUpdate( @ApiParam("传入对象") @RequestBody User user){
    if(user.getId()!=null){
        userService.updateById(user);
    }else{
        userService.insert(user);
    }
    return JSONResult.success();
}

效果图 : 

微服务

依赖一样的加

需要多加两个配置类

package cn.itsource.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import springfox.documentation.swagger.web.*;

import java.util.Optional;

@RestController
@RequestMapping("/swagger-resources")
public class SwaggerHandler {

    @Autowired(required = false)
    private SecurityConfiguration securityConfiguration;

    @Autowired(required = false)
    private UiConfiguration uiConfiguration;

    private final SwaggerResourcesProvider swaggerResources;
 
    @Autowired
    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
        this.swaggerResources = swaggerResources;
    }
 
 
    @GetMapping("/configuration/security")
    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
    }
 
    @GetMapping("/configuration/ui")
    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
    }
 
    @GetMapping("")
    public Mono<ResponseEntity> swaggerResources() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }
}
package cn.itsource.config;

import lombok.AllArgsConstructor;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.support.NameUtils;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Component
@Primary
@AllArgsConstructor
public class SwaggerProvider implements SwaggerResourcesProvider {
    public static final String API_URI = "/v2/api-docs";
    private final RouteLocator routeLocator;
    private final GatewayProperties gatewayProperties;


    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        List<String> routes = new ArrayList<>();
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))
                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()
                        .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
                        .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
                                predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
                                        .replace("/**", API_URI)))));
        return resources;
    }
    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion("2.0");
        return swaggerResource;
    }
}

网页访问:http://localhost:10030/swagger-ui.html#/product-controller/AddUsingPOST

===========================中间的端口跟自行修改===============

。别人家的孩子。
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
详细分析 Bladex中的swagger-resources资源未授权访问的解决方法
码农研究僧的博客
07-27 396
有如下方式,网关过滤、去除配置以及修改代码还有隐藏彩蛋(附Demo),推荐阅读
springboot集成swagger2页面出现swagger-resources404
xiaozhuyehuifanqiang的博客
03-18 4989
访问/doc.html出现页面,但是没有接口文档,查看页面元素发现问题: /swagger-resources 404 /swagger-resources/configuration/ui 404我是springboot项目,分模块,common包,api包,manager包,swagger配置放到common包下 1.查看配置是否缺失,看着都有 2.查看版本号,看着没啥问题 3.网上也查过,看到说增加资源路径配置,我也加了 问题解决 启动类上没加注解:@EnableSwagger2 导致的问题 我尝试了
(十一)Alian 的 Spring Cloud 文档中心(swagger聚合文档)
嘉禾嘉宁papa
07-23 6176
swagger聚合文档,swagger文档服务中心搭建
springfox 源码分析(十六) 分组接口swagger-resouces
八一菜刀的专栏
10-10 4010
通过前面的分析,我们最终得到了springfox的Documentation文档对象,将我们的RESTful接口最终转换为了文档对象,文档对象是包含了接口列表、分组信息等属性的 在springfox中,为我们提供了springfox-swagger-ui来呈现最终的接口信息.在ui界面中有两个核心接口: swagger-resources:swagger分组接口,创建多少Docket,就会有多...
swagger-resources/configuration/ui 404
李白的博客
04-17 2万+
前言:我的项目是基于ssm的 当我们使用swagger时可能会出现如下情况 swagger页面只把头显示出来了但是下面的接口信息并没有显示 解决办法一 首先在External Libraries中查看springfox-swagger2和springfox-swagger-ui版本号是否一致,如果不是一致的就改成一致的。 解决办法二 在web.xml中查看url-pattern是否是这样的&lt...
Swagger
willem的博客
03-05 220
将各个系统的API数据集中 客户端 将这个放到你的config启动,注意这里我用了一个占位符获取当前文档的名称,避免写死后续可能添加其他模块 pom文件中添加以下依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</ar...
项目中swagger的使用
weixin_43167662的博客
09-14 1470
在项目中我们的API文档有swagger来进行管理,每个服务模块都配有swagger来进行接口管理 那么怎么实现swagger的同一管理呢,我们可以使用zuul网关来实现 就是当前端访问相应服务的时候zull网关会根据服务ip去调响应的服务模块的swaggerAPI, 在项目中的使用方法 在每个模块中添加swagger的依赖 <!-- swagger2 --> <dependency> <groupId>io.springfox</groupI
Spring Boot整合swagger使用教程详解
08-18
Spring Boot整合Swagger使用教程详解 本文主要介绍了如何将Swagger集成到Spring Boot项目中,以自动生成接口文档,提高开发效率和减少维护成本。 知识点一:Swagger的优点 * 自动生成文档:Swagger可以根据接口的...
SpringBoot-SpringBoot整合Swagger使用教程(图文介绍,一篇就够了).html
最新发布
06-28
SpringBoot-SpringBoot整合Swagger使用教程(图文介绍,一篇就够了) SpringBoot-SpringBoot整合Swagger使用教程(图文介绍,一篇就够了) SpringBoot-SpringBoot整合Swagger使用教程(图文介绍,一篇就够了) SpringBoot-...
swagger使用教程——快速使用swagger
m0_67402588的博客
06-12 925
官网:https://swagger.io/swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RestFul风格的web服务,总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器断的代码,允许API来始终保持同步。作用:1. 接口的文档在线自动生成。2. 功能测试。Swagger-tools:提供各种与Swagger进行集成和交互的工具。例如模式检验、Swagger 1.2文档转换成Swagger 2.0文档等功能。Swagger-core: 用于
集成Swagger的问题(swagger-resources/configuration/ui 404、弹窗等)解决
热门推荐
小羽毛的博客
04-23 6万+
一、背景 关于swagger的特性功能,用过的人都很清楚,确实也好用。可以参考http://springfox.github.io/springfox/docs/current/。另外关于swagger的使用集成,其实比较简单,网上博客也不少。尤其是SpringBoot出现后,集成更为简单方便。当然有时候也会遇到一些问题,以前集成过几次,都很顺手,但这次却遇到麻烦。 二...
避免/null/swagger-resources/死循环,升级swagger2.0到3.0踩坑记录
whatsyournamejack的专栏
10-11 3325
1.问题 由于安全原因需要屏蔽生产的swagger的页面,是整个页面都屏蔽,而不是屏蔽接口,需要的效果就是访问的时候是404 博主按照网上一整搜索,下面列出: 1.https://www.cnblogs.com/anakin/p/8569820.html 2.https://blog.csdn.net/wangxy_job/article/details/106669805 一顿操作上了生产后出了问题,浏览器窗口一直弹窗,日志一直打印显示swagger死循环,/null/swagger-r...
Swagger的使用
qq_16410733的博客
07-20 1384
Swagger的使用何为Swagger添加依赖启动类项目配置类配置拦截器常用APIApi注解ApiOperation注解ApiParam注解ApiModelProperty注解swagger页面 何为Swagger 设计是API开发的基础。Swagger使API设计变得轻而易举,为开发人员,架构师和产品所有者提供了易于使用的工具。——官网 1)具有准确的API模型 API设计容易出错,在建模API...
解决Swagger控制台循环弹窗/null/swagger-resources/configuration/security
qq_44717657的博客
09-21 4700
解决Swagger控制台循环弹窗/null/swagger-resources/configuration/security
关于Springboot集成swagger2出现的swagger-resouces和ui请求的404问题
iteye_13408的博客
03-19 2100
关于SpringBoot继承Swagger2本地启动正常访问,打 成war包进行服务器部署或者其他端口Tomcat部署出现【swagger-resources】或者【swagger-resources/configuration/ui】请求404的问题
Swagger2.7升级到3.0后的若干问题
qq_34963264的博客
09-04 1984
这个报错很明显,说ApiKey无法转换为SecurityScheme,然后我看了下3.0和2.7的源码,3.0版本docket.securitySchemes的方法目前只支持SecurityScheme,2.7版本docket.securitySchemes的方法支持SecurityScheme的子类。可以看下代码中创建的版本是否正确, swagger源码的版本目前有三个值,对于3.0版本要选择OAS_30。翻译过来就是版本不匹配,需要在代码中设置为3.0版本。
swagger的使用总结
qq_39461206的博客
01-22 1586
Swagger的介绍和使用实战
springboot配置Swagger遇到swagger-resources/configuration/ui报404的解决方法
天马行空的创作中心
06-18 3万+
Swagger配置文件,pom依赖,注解都配置完成后,访问http://localhost:8080/项目名/swagger-ui.html之后,只能出现页面头,无法加载出info信息和api信息。 如下: 后查看页面显示,找不到相关js。 解决方法: 把pom引入的依赖改成一致的版本。虽然引入的时候版本号都是写的2.6.1,但是当我查看external libraries的时候发...
写文章

热门文章

  • Swagger使用教程 831

分类专栏

  • idea

最新文章

2022年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家沁源玻璃钢花盆花器商场美陈策划方案ppt安徽人物玻璃钢雕塑天津园林玻璃钢雕塑息烽玻璃钢雕塑定做深圳商场玻璃钢雕塑制作多少钱浙江定制玻璃钢雕塑哪家便宜精品玻璃钢花盆新区玻璃钢雕塑欧式壁画玻璃钢花瓶花盆广东玻璃钢仿铜雕塑定制吉林定制玻璃钢雕塑批发邵阳玻璃钢雕塑定制江西玻璃钢仿真水果雕塑吉林公园玻璃钢雕塑方法校园玻璃钢卡通雕塑咨询问价威海玻璃钢卡通雕塑定制文峰玻璃钢雕塑定制广东常见商场美陈市场报价烟台动物玻璃钢雕塑厂家濮阳广场玻璃钢景观雕塑公司重庆玻璃钢花盆.仿真玻璃钢雕塑加工厂南京栖霞商场美陈成品玻璃钢花盆哪家好合肥玻璃钢花盆批发昆明景区玻璃钢雕塑厂家嘉兴玻璃钢陶瓷雕塑厂家淮北户内玻璃钢雕塑定做价格宁夏动物玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化