Swagger注解-@ApiResponses 和 @ApiResponse


Swagger注解-@Api
Swagger注解-@ApiOperation
Swagger注解-@ApiImplicitParams 和 @ApiImplicitParam
Swagger注解-@ApiModel 和 @ApiModelProperty
Swagger注解-@ApiResponses 和 @ApiResponse
Swagger注解-@ResponseHeader
Swagger注解-@ApiParam
Swagger注解-@Authorization 和 @AuthorizationScope
Swagger注解-@SwaggerDefinition
Swagger注解-@ExternalDocs
Springboot 集成 Swagger GitHub 地址


@ApiResponses

代码示例

github 代码示例: https://github.com/CoderFreeMan/swagger-demo

使用场景

在 Rest 接口上使用,用作返回值的描述

概述

一个包装器,允许列出多个 ApiResponse,若果你需要描述单个 ApiResponse,你仍然必须使用此注解并将@ApiResponse 包装在一个数组中

属性

属性名称数据类型默认值说明
valueApiResponse[]ApiResponse 列表

@ApiResponse

使用场景

在 Rest 接口或类上和 @ApiResponses 组合使用,组装返回参数说明

概述

描述操作的可能响应,这可用于描述 Rest API 调用中可能的成功和错误 code 码。此注解可以在方法或类级别应用;仅当在方法级别或抛出时未定义相同代码的@ApiResponse注解时才会解析类级别注解异常,如果响应中使用了不同的响应类,则可以通过将响应类于响应码组合使用。注意swagger不允许单个响应代码的多个响应类型。此注解不直接使用,单独使用时swagger不会解析,应该和ApiResponses组合使用。

属性

属性名称数据类型默认值说明
codeint响应的HTTP状态码
messageString伴随响应的人类可读的消息
responseClass<?>Void.class用于描述消息有效负载的可选响应类,对应于响应消息对象的 schema 字段
referenceString“”指定对响应类型的引用,指定的应用可以使本地引用,也可以是远程引用,将按原样使用,并将覆盖任何指定的response()类
responseHeadersResponseHeader[]@ResponseHeader(name = “”, response = Void.class)可能响应的 header 列表
responseContainerString“”声明响应的容器,有效值为List,Set,Map,任何其他值都将被忽略

Swagger注解-@Api
Swagger注解-@ApiOperation
Swagger注解-@ApiImplicitParams 和 @ApiImplicitParam
Swagger注解-@ApiModel 和 @ApiModelProperty
Swagger注解-@ApiResponses 和 @ApiResponse
Swagger注解-@ResponseHeader
Swagger注解-@ApiParam
Swagger注解-@Authorization 和 @AuthorizationScope
Swagger注解-@SwaggerDefinition
Swagger注解-@ExternalDocs
Springboot 集成 Swagger GitHub 地址


<think> 问题:在Swagger UI中没有显示新增的接口 `/insertGoodInfo`。 可能原因: 1. 控制器类没有被Swagger扫描到。 2. 请求方法(如`@GetMapping`, `@PostMapping`等)未正确注解,或者使用了`@RequestMapping`但没有指定HTTP方法。 3. Swagger配置问题,可能过滤了某些接口。 4. 方法访问权限问题(如private、protected等),但通常控制器方法都是public。 解决方案: 1. 确保控制器类上有`@RestController`或`@Controller`注解,并且被包含在Swagger的扫描路径中。 2. 检查方法上的注解:使用`@RequestMapping`时需要指定method,或者使用组合注解如`@PostMapping`。 3. 查看Swagger配置,确认没有通过`Docket`的`paths`或`apis`方法过滤掉该接口。 代码示例: 原代码: ```java @Operation(summary = "新增货物详细信息", description = "返回一个简单的欢迎字符串") @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "成功获取欢迎信息") }) @RequestMapping("/insertGoodInfo") public int insertGoodInfo(InventoryTransactions GoodInfo) { return inventoryTransactionsService.insertSelective(GoodInfo); } ``` 修改建议: 1. 使用`@PostMapping`明确指定为POST方法(因为新增操作通常用POST)。 2. 检查控制器类上是否有`@RestController`或`@Controller`注解。 3. 如果使用了`@RequestMapping`,请确保指定method,例如:`@RequestMapping(value = "/insertGoodInfo", method = RequestMethod.POST)`。 修改后的代码: ```java @Operation(summary = "新增货物详细信息", description = "新增货物信息并返回操作结果(1-成功,0-失败)") @ApiResponse(responseCode = "200", description = "成功新增货物信息") @PostMapping("/insertGoodInfo") public int insertGoodInfo(@RequestBody InventoryTransactions goodInfo) { return inventoryTransactionsService.insertSelective(goodInfo); } ``` 注意: - 使用`@PostMapping`代替`@RequestMapping`,这样更清晰。 - 参数`InventoryTransactions goodInfo`前添加`@RequestBody`注解(因为通常新增操作会接收JSON数据)。 - 修改了`@Operation`的description,使其更准确(原描述是返回欢迎字符串,但实际返回的是整数结果)。 另外,检查Swagger配置类,确保扫描到该控制器所在的包。例如,在Swagger配置中: ```java @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 替换为你的控制器包 .paths(PathSelectors.any()) .build(); } ``` 如果没有配置包路径,可能会导致某些控制器没有被扫描到。 如果还是不行,可以检查: - 项目是否添加了Swagger的依赖(如springfox-boot-starter或springdoc-openapi-ui)。 - 启动类上是否有`@EnableOpenApi`(针对Swagger3)或`@EnableSwagger2`(针对Swagger2)注解(注意:Springfox Swagger3不需要在启动类上加注解)。 如果使用Springdoc(OpenAPI 3): - 依赖:`org.springdoc:springdoc-openapi-ui` - 不需要`@Enable`注解,自动配置。 - 配置类可能不同,但通常不需要配置即可自动扫描。 由于问题中提到了`@Operation``@ApiResponse`,这些是Swagger注解,但注意在SpringfoxSpringdoc中注解的包不同: - Springfox: `io.swagger.annotations` - Springdoc: `io.swagger.v3.oas.annotations` 请确保使用的注解与依赖一致。 如果使用的是Springdoc(OpenAPI 3),则上述注解是正确的。如果是Springfox,则应该使用`@ApiOperation``@ApiResponse`(在`io.swagger.annotations`包中)。 因此,请检查依赖注解是否匹配。 总结步骤: 1. 确认依赖(Springfox还是Springdoc)。 2. 确认注解使用正确(包名正确)。 3. 确保控制器方法注解正确。 4. 检查Swagger配置,确保扫描到控制器。 如果问题仍然存在,可以在Swagger配置中尝试开启更广泛的扫描,例如: ```java .apis(RequestHandlerSelectors.any()) ``` 但这样可能会扫描到一些不需要的接口。 最后,如果使用的是Spring Boot 2.6+,请注意路径匹配策略的变化可能导致的问题(如`spring.mvc.pathmatch.matching-strategy`设置为`ant_path_matcher`,因为默认是`path_pattern_parser`,而Springfox可能不支持)。但Springdoc支持新版本。 根据以上步骤进行排查修改,应该能解决问题。 </think># 解决 Swagger UI 不显示接口的问题 针对您的 Swagger UI 不显示 `/insertGoodInfo` 接口的问题,以下是完整的解决方案: ## 问题分析 Swagger UI 不显示接口通常由以下原因引起: - 缺少必要的 Swagger 注解 - HTTP 方法注解使用不当 - 方法访问级别问题 - Swagger 配置不完整 - 参数注解缺失 ## 完整修复方案 ```java import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/inventory") // 添加控制器级别的路径 @Tag(name = "库存管理", description = "库存交易相关操作") // 添加控制器标签 public class InventoryController { // ... 其他代码 ... /** * 新增货物详细信息 * @param goodInfo 货物信息 * @return 操作结果 */ @Operation( summary = "新增货物信息", description = "添加新的货物库存交易记录", tags = {"库存管理"} // 关联控制器标签 ) @ApiResponses(value = { @ApiResponse( responseCode = "200", description = "操作成功", content = @Content(schema = @Schema(implementation = Integer.class)) ), @ApiResponse( responseCode = "400", description = "无效请求参数" ), @ApiResponse( responseCode = "500", description = "服务器内部错误" ) }) @PostMapping("/insertGoodInfo") // 明确使用POST方法 public int insertGoodInfo( @Parameter( description = "货物信息对象", required = true, schema = @Schema(implementation = InventoryTransactions.class) ) @RequestBody InventoryTransactions goodInfo) { // 添加@RequestBody注解 return inventoryTransactionsService.insertSelective(goodInfo); } } ``` ## 关键修复点解释 1. **添加控制器级注解**: ```java @Tag(name = "库存管理", description = "库存交易相关操作") ``` - `@Tag` 注解为控制器添加分类标签,使UI更清晰 2. **明确HTTP方法**: ```java @PostMapping("/insertGoodInfo") ``` - 使用 `@PostMapping` 替代通用的 `@RequestMapping`,明确HTTP方法 3. **添加请求体注解**: ```java @RequestBody InventoryTransactions goodInfo ``` - `@RequestBody` 告诉Swagger这是一个请求体参数 4. **完善参数描述**: ```java @Parameter( description = "货物信息对象", required = true, schema = @Schema(implementation = InventoryTransactions.class) ) ``` - 提供参数详细说明模型引用 5. **增强响应描述**: ```java @ApiResponses(value = { @ApiResponse(responseCode = "200", ...), @ApiResponse(responseCode = "400", ...), @ApiResponse(responseCode = "500", ...) }) ``` - 添加多种响应状态码的描述 ## 补充Swagger配置类 确保您有完整的Swagger配置类: ```java import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info() .title("库存管理系统 API") .version("1.0") .description("库存管理相关接口文档") .termsOfService("http://example.com/terms/")); } } ``` ## 添加依赖检查 确保您的 `pom.xml` 或 `build.gradle` 中有正确的依赖: Maven: ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <version>2.0.4</version> </dependency> ``` Gradle: ```groovy implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4' ``` ## 常见问题排查清单 1. **检查注解包路径**: - 确认使用正确的注解包:`io.swagger.v3.oas.annotations.*` - 避免混用旧版 `io.swagger.annotations.*` 2. **方法访问级别**: - 确保控制器方法是 `public` 3. **路径配置冲突**: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 确保不拦截Swagger路径 registry.addResourceHandler("/swagger-ui/**") .addResourceLocations("classpath:/META-INF/resources/webjars/springdoc-openapi-ui/") .resourceChain(false); } }; } } ``` 4. **启用Swagger UI端点**: 在 `application.properties` 中添加: ```properties springdoc.swagger-ui.path=/swagger-ui.html springdoc.api-docs.path=/api-docs springdoc.packages-to-scan=com.your.package.controllers springdoc.paths-to-match=/api/** ``` ## 验证步骤 1. 启动应用后访问:`http://localhost:8080/swagger-ui/index.html` 2. 检查: - 左侧是否有"库存管理"分类 - 是否显示"新增货物信息"接口 - 参数是否显示为请求体 - 响应示例是否显示
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值