对于 java Controller swagger-ui.html 呈现意外的 http 代码

For java Controller swagger-ui.html renders unexpected http codes

我在 Springboot RestController 中有以下 java 端点,并使用 4 个 ApiResponses 的一些 Swagger 注释进行了注释:

    @ApiResponses(value = {
            @ApiResponse(code = 200, message = "Successfully sign in"), 
            @ApiResponse(code = 400, message = "Missing request body"), 
            @ApiResponse(code = 404, message = "Schema not found"), 
            @ApiResponse(code = 500, message = "Internal error")
            })
    @PostMapping(
            path = "/login",
            produces = "application/json; charset=utf-8")
    public LoginResponse login(
            @ApiParam(
                    name="cred", 
                    value="Credenciales de quien intenta ingresar al sistema")
            @RequestBody CredencialesRequest cred
            ) throws ControllerException {
        return accessService.login(cred.getUsuario(), cred.getClave());
    }

如您所见,我已将 4 个响应代码声明为可能的 HTTP 响应:200、400、404 和 500

当我 运行 应用程序并转到 http://localhost:8080/swagger-ui.html 时,UI 显示我在端点中描述的 4 个代码。但是,它显示了更多的 http 代码。请看这张图:

额外的代码是:201(创建)、401(未授权)和 403(禁止)。为什么?对于我的用例,“登录”端点应该始终可供任何用户访问,因此至少,在这种情况下,401 和 403 根本没有意义。

正如评论中所说,为了去除 swagger 中多余的 http 代码 UI,我们需要修改我们的配置文件,将 useDefaultResponseMessages(false) 添加到 api() 方法在我们的 SwaggerConfig 中是这样的:

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)  // I HAD TO ADD THIS LINE !!!!
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

就是这样!