Swagger很久以前就更新到3了,但是一直没来得及和小伙伴们分享具体的玩法,主要是Swagger虽然升级了,但是我们还是可以在SpringBoot中使用老版本的Swagger,不过好像从SpringBoot2.6开始,你会发现老版本的Swagger不能用了。哎,反正迟早得做,不如今天做!今天我们就来看看如何在SpringBoot2.7.1中使用Swagger3。1、依赖首先我们创建一个SpringBoot工程,引入Swagger3依赖,如下:io.springfoxspringfox-boot-starter3.0.0在Swagger2时代,我们需要引入两个依赖,现在只需要这一个。2.配置接下来在启动类中添加两个注解启用Swagger:@SpringBootApplication//Enableswagger@EnableSwagger2@EnableOpenApi@EnableWebMvcpublicclassSwaggerDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SwaggerDemoApplication.class,参数);}}现在,基本的工作已经完成,即使我们不做任何额外的事情,也可以自动生成Swagger文档。启动项目,在浏览器中输入http://localhost:8080/swagger-ui/index.html可以查看Swagger文档。小伙伴们需要注意了,这个默认的文档访问路径和之前的Swagger2是不一样的!扫描到的接口之一是BasicErrorController,它是SpringBoot默认提供的异常处理器。因为我们没有设置Swagger的包扫描路径,所以连同这个一起扫描。好了,现在我们可以对这个网页进行一些自定义了,如下:@ConfigurationpublicclassSwagger2Config{@BeanDocketdocket(){returnnewDocket(DocumentationType.OAS_30)//配置网站的基本信息.apiInfo(newApiInfoBuilder()//站点标题.title("天津项目在线接口文档")//标题后的版本号.version("v1.0").description("天津项目接口文档")//联系方式.contact(newContact("javaboy","http://www.javaboy.org","111@qq.com")).build()).select()//指定接口的位置.apis(RequestHandlerSelectors.basePackage("org.javaboy.swagger_demo.controller")).build();}}这个配置和前面的Swagger2基本一样。配置完成后,会更新Swagger页面的基本信息。3.接口配置接下来是一些具体的接口配置。这个和Swagger2基本一样,也很容易理解。我给小伙伴们举个例子:@RestController@Api(tags="用户管理相关界面")@RequestMapping("/user")publicclassUserController{@PostMapping("/")@ApiOperation("添加用户界面")@ApiImplicitParams({@ApiImplicitParam(name="用户名",value="用户名",defaultValue="李四"),@ApiImplicitParam(name="地址",value="用户地址",defaultValue="深圳",required=true)})publicRespBeanaddUser(Stringusername,@RequestParam(required=true)Stringaddress){returnnewRespBean();}@GetMapping("/")@ApiOperation("根据id查询用户界面")@ApiImplicitParam(name="id",value="userid",defaultValue="99",required=true)publicUsergetUserById(@PathVariableIntegerid){用户user=newUser();user.setId(id);返回用户;}@PutMapping("/{id}")@ApiOperation("根据id更新用户界面")publicUserupdateUserById(@RequestBodyUseruser){returnuser;}}这里涉及到多个API,分享给大家说明:@Api注解可以用来标记当前Controller的功能。@ApiOperation注解用于标记方法的功能。@ApiImplicitParam注解用来描述一个参数,可以配置参数的中文含义,或者给参数设置一个默认值,这样在接口测试的时候可以避免手动输入。如果有多个参数,则需要使用多个@ApiImplicitParam注解来描述,多个@ApiImplicitParam注解需要放在一个@ApiImplicitParams注解中。需要注意的是,@ApiImplicitParam注解虽然可以指定该参数是必须的,但不能代替@RequestParam(required=true)。前者仅在Swagger框架中需要。如果丢弃Swagger,则此限制将被消除。使用,所以如果开发者需要指定一个参数是必须的,@RequestParam(required=true)注解不能省略。如果参数是一个对象(比如上面的update接口),参数的描述也可以放在实体类中。例如下面这段代码:@ApiModelpublicclassUser{@ApiModelProperty(value="userid")privateIntegerid;@ApiModelProperty(value="username")privateString用户名;@ApiModelProperty(value="用户地址")私有字符串地址;//getter/setter}好了,经过上面的配置,接下来,刷新刚才打开的页面,可以看到如下效果:可以看到这里列出了所有的接口,包括接口的请求方法,接口的地址和接口名称等,点击某个接口,可以看到如下信息:可以看到接口的参数,参数要求,参数默认值等都显示出来了,参数下的查询type表示参数为key/value形式传输,点击右上角的Tryitout,可以进行接口测试:点击Execute按钮,表示发送测试请求。测试结果将显示在下面的Response中。朋友们注意,参数类型下面的query表示参数是以key/value的形式传递的,这里的value也可能是body,也就是说参数是以请求体的形式传递的。比如上面的update接口是这样的:当然还有一种可能就是这里的参数是path,也就是说参数是在path中传递的,比如根据id查询用户界面:的当然除了这些,还有一些响应值的注解,比较简单,大家可以自己摸索。4.Security中的配置如果我们的SpringBoot项目中集成了SpringSecurity,如果不做额外的配置,Swagger文档可能会被拦截。这个时候只有Swagger相关的文件和接口发布才行(最新版的SpringBoot2.7.1):){web.ignoring().antMatchers("/swagger-ui/**").antMatchers("/swagger-resources/**").antMatchers("/v3/**");}};}}在此之后,无需身份验证即可访问Swagger文件。不知道大家看懂了吗?