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.ErrorPayload<T>的内部类。但是无论如何,我也尝试了其他一些类,例如:String,Map等,但是大张旗鼓的ui仍然显示空响应:

enter image description here

从现在开始,我如何设法使其尽可能少地改变?

解决方法

Springfox 3.0默认使用v3模型,但是您使用的是io.swagger.annotations.ApiResponses而不是io.swagger.v3.oas.annotations.responses.ApiResponsesio.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一起使用,并在端点处直接注释。

我希望这是您想要的那个。 Screenshot of swagger ui