对于 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());
}
就是这样!
我在 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());
}
就是这样!