为什么knife4j的响应示例只显示默认的配置值?
时间: 2025-03-22 10:08:21 浏览: 28
### 如何在 Knife4j 中自定义响应示例
在使用 Knife4j 的过程中,可以通过配置 `ResponseMessage` 或者通过 OpenAPI3 的方式来自定义 API 响应示例。以下是实现这一目标的具体方法:
#### 方法一:基于注解的方式
可以利用 `@ApiOperationSupport` 和 `@ApiResponses` 注解来设置自定义的响应示例。
```java
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@RestController
@RequestMapping("/example")
public class ExampleController {
@GetMapping("/test")
@ApiOperationSupport(ignoreParameters = {"id"}, authorizations = {
@Authorization(name="basic")})
@ApiResponses(value = {
@ApiResponse(code = 200, message = "成功", response = SuccessResponse.class),
@ApiResponse(code = 400, message = "错误请求"),
@ApiResponse(code = 500, message = "服务器内部错误")
})
public ResponseEntity<SuccessResponse> test() {
return ResponseEntity.ok(new SuccessResponse());
}
}
```
在此代码中,`@ApiResponses` 被用来定义不同的 HTTP 状态码及其对应的描述和返回数据结构[^1]。
#### 方法二:通过 YAML 文件配置
如果希望更灵活地控制文档中的响应内容,可以在 `application.yaml` 文件中进行如下配置:
```yaml
knife4j:
enable: true
documents:
- group: example-group
name: 示例分组
locations: classpath:markdown/example/*
globalOperationsSorter: Ascending
globalResponseMessages:
get:
- code: 200
message: 成功
modelRef: "#/components/schemas/SuccessResponse"
- code: 400
message: 请求失败
post:
- code: 201
message: 创建成功
```
上述配置指定了 GET 和 POST 请求可能返回的状态码以及消息体模型引用[^4]。
#### 方法三:升级至 Knife4j 3.x 并采用 OpenAPI3 方式
当项目迁移到 Knife4j 3.x 后,默认支持 OpenAPI3 标准。此时需注意调整原有注解形式以匹配新标准的要求。例如,在创建 Docket 对象时显式声明 OAS_30 版本[^3]:
```java
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
.paths(PathSelectors.any())
.build();
}
```
同时也可以直接修改实体类上的字段注释以便更好地展示实际业务逻辑下的样例数据:
```java
@Data
public class SuccessResponse {
private String status = "OK";
/**
* 描述信息.
*/
@ApiModelProperty(example = "操作完成")
private String description;
}
```
这样即可确保前端界面能够正确渲染预设好的实例值而非通用模板[^2]。
---
阅读全文
相关推荐


















