如何解决Swagger UI无法显示来自自定义注释界面的响应模型
我正在尝试为swagger文档定义全局响应。我有以下注释界面:
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.web.bind.annotation.ResponseBody;
import java.lang.annotation.*;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@ApiResponses(value = {
@ApiResponse(
code = 200,message = "Successful status response"
),@ApiResponse(
code = 401,message = "Unauthorized",response = Payload.Error.class
),@ApiResponse(
code = 403,message = "Forbidden",@ApiResponse(
code = 404,message = "Not Found",@ApiResponse(
code = 500,message = "General Server Error",})
@ResponseBody
public @interface PayloadResponse {
}
在我的控制器内部,我使用这样的界面:
@ApiOperation("Get user details after login")
@PayloadResponse
@GetMapping("/user")
Payload<User> fetchUser(
@ApiIgnore
@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization
);
这里Payload.Error
是Payload<T>
的内部类。但是无论如何,我也尝试了其他一些类,例如:String,Map等,但是大张旗鼓的ui仍然显示空响应:
从现在开始,我如何设法使其尽可能少地改变?
解决方法
Springfox 3.0默认使用v3模型,但是您使用的是io.swagger.annotations.ApiResponses
而不是io.swagger.v3.oas.annotations.responses.ApiResponses
和io.swagger.annotations.ApiResponse
代替io.swagger.v3.oas.annotations.responses.ApiResponse
。
此问题已记录在
https://github.com/springfox/springfox/issues/3503
但是解决方法也非常容易。只需添加一个属性即可使用v2模型覆盖v3模型。
springfox.documentation.swagger.use-model-v3=false
它就像一种魅力。与@PayloadResponse
一起使用,并在端点处直接注释。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。