Swagger使用及常见问题

本文详细介绍如何在SpringBoot项目中集成Swagger2实现API文档自动生成。包括在pom.xml中添加依赖、编写配置文件SwaggerConfig及注解使用等关键步骤,并解决常见问题。

Spring Boot中使用

在pom.xml中注入依赖

<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
 

然后编辑配置文件SwaggerConfig

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket userApi() {

     Predicate<RequestHandler> swaggerSelector = (Predicate<RequestHandler>)RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class);

        return new Docket(DocumentationType.SWAGGER_2)
                .securitySchemes(newArrayList(new ApiKey[]{this.apiKey()}))
//               .securitySchemes(newArrayList(new BasicAuth("test"))) //账号密码登录
//               .enable(false)   //禁止使用
                .apiInfo(apiInfo())
                .select()
//               .apis(RequestHandlerSelectors.basePackage("com.boot"))
                .apis(swaggerSelector)
                .paths(PathSelectors.any())
                .build();
    }


    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("**接口")
                .description("构建restful api")     
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                .contact("name")
                .version("1.0.0")
                .build();
    }


    ApiKey apiKey() {
        return new ApiKey("sessionId", "sessionId", "header");
    }
}

注解使用

@Api(value = "TestController", description = "**系统", produces = MediaType.APPLICATION_JSON_VALUE)
@Controller
public class TestController {
    @ApiOperation(value = "查找所有用户",notes = "注意")
    @ApiImplicitParams({
            @ApiImplicitParam(name="userEmail",value="用户邮箱",dataType="string", paramType = "query",example="test"),
            @ApiImplicitParam(name="display",value="展示",dataType="string", paramType = "query")})
    @GetMapping("/test")
    @ResponseBody
    public Result findAllUser(String userEmail, String display)throws Exception{
    
    }

使用过程中常见问题
1、api接口没有问题,可以用Postman测试成功,但是swagger测试报错,就是注解中的参数paramType没等于query,增加上即可
@ApiImplicitParam(name="name",value="用户名",dataType="String", paramType = "query")

2、填写完注解后,在网页上看到每个接口都有GET、POST、DELETE等多种请求方式,要在注解中添加httpMethod = "POST"
 @ApiOperation(value = "用户与系统对应关系",httpMethod = "POST")

 

有的版本写法不一样,有的可能是 method = RequestMethod.GET

 

 

 

 

 

### 使用 Swagger UI 时可能遇到的常见问题及解决方法 #### 1. **Swagger UI 文档无法正常加载** - 如果在访问 `swagger-ui.html` 页面时,文档无法加载或显示空白页面,可能是由于以下原因导致: - **缺少依赖库**:确保项目中正确引入了 Swagger 的相关依赖库。例如,在 Spring Boot 项目中,需要添加 `springfox-boot-starter` 或其他相关依赖[^5]。 - **路径配置错误**:检查 Swagger 配置类中的包路径是否正确。如果控制器类不在指定的包路径下,则这些接口不会被扫描到。 - **CORS 限制**:当 API 和 Swagger UI 不在同一域名下时,可能会触发跨域资源共享(CORS)限制。可以通过在后端添加 CORS 支持来解决此问题。 #### 2. **接口参数未正确显示** - 如果接口的请求参数或响应结构未能正确显示,通常是因为缺少必要的注解。例如,在 Spring Boot 中,可以使用 `@ApiParam`、`@ApiModelProperty` 等注解为参数提供详细描述[^4]。 ```java @GetMapping("/user") public ResponseEntity<User> getUser(@ApiParam(value = "用户ID", required = true) @RequestParam Long id) { // 示例代码 return ResponseEntity.ok(new User()); } ``` #### 3. **复杂 JSON 数据难以输入** - 对于多层嵌套的 JSON 数据,直接在 Swagger UI 中输入可能较为繁琐。可以通过以下方式优化: - **使用示例数据**:在接口定义中提供示例 JSON 数据,帮助用户快速测试接口[^4]。 - **外部工具辅助**:对于特别复杂的 JSON 结构,可以先在 Postman 或其他工具中构造请求,再复制到 Swagger UI 中验证。 #### 4. **文档更新不及时** - 如果修改了接口但 Swagger 文档未同步更新,可能是因为以下原因: - **缓存问题**:浏览器可能会缓存旧版本的文档。尝试清除浏览器缓存或使用无痕模式访问 Swagger UI 页面。 - **重新启动服务**:某些情况下,需要重启应用服务以使更改生效[^5]。 #### 5. **安全性问题** - Swagger UI 默认会暴露所有接口信息,这可能带来安全风险。建议采取以下措施: - **限制访问范围**:通过 IP 白名单或身份验证机制控制对 Swagger UI 的访问。 - **生产环境禁用**:在生产环境中关闭 Swagger UI 功能,仅在开发和测试阶段启用[^4]。 #### 6. **文档生成侵入性高** - 将 Swagger 集成到项目中可能导致代码耦合度增加。为减少侵入性,可以考虑以下方案: - **独立部署文档**:将 Swagger 文档单独部署为一个服务,避免与主应用混在一起。 - **手动编辑 JSON 文件**:虽然手动维护 JSON 文件较为麻烦,但它可以完全独立于项目运行。 ```yaml # 示例:Swagger JSON 手动编辑片段 paths: /hello: get: summary: 测试接口 responses: '200': description: 成功返回 content: application/json: schema: type: string example: Hello Swagger-ui ``` ### 注意事项 - 确保 Swagger 配置类中正确设置了 API 信息,例如标题、描述和版本号等[^5]。 - 在团队协作时,尽量统一 Swagger使用规范,避免因个人习惯不同导致文档混乱。 - 定期检查并更新 Swagger 相关依赖,以获取最新的功能和修复已知问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值