Swagger - 呈现已声明异常的响应状态

Swagger - Render response status for declared exception

我正在大摇大摆地做我的 REST 文档。我已经设置好它并获得了对 SwaggerUi 的访问权限,还看到了我所有配置的 REST 资源及其支持的方法。

在我的后端,我有一个 ControllerAdvice,它为我的所有控制器执行全局异常处理。在控制器建议中处理的一个示例异常是 ResourceAlreadyExistsException,当我尝试创建一个已经存在的资源时,显然。在那种情况下,我的异常处理程序以 409 CONFLICT 状态代码响应。

@ExceptionHandler(value = ResourceAlreadyExistsException.class)
@ResponseStatus(HttpStatus.CONFLICT)
protected ErrorResponse handleResourceAlreadyExists(ResourceAlreadyExistsException ex, WebRequest request) {
    return new ErrorResponse(ex.getMessage());
}

有了这个先决条件,我在 REST 控制器中映射的创建方法如下所示:

@RequestMapping(method = POST)
@ResponseStatus(HttpStatus.CREATED)
public RoleDto createRole(@RequestBody RoleDto roleDto) throws ResourceAlreadyExistsException {
    return roleManager.createRole(roleDto);
}

使用默认配置,Swagger 仅向我显示 201 作为可能的响应代码。虽然409也是可以的。

当然我可以将 @ApiResponse(code = 409, message = "Role already exists") 定义添加到 createRole() 方法中,但这似乎是双重信息,因为我已经通过抛出异常暗示了这一点。

如何告诉 swagger,如果可以抛出 ResourceAlreadyExistsException,409 也是可能的响应代码?

我试过在 ResourceAlreadyExistsException 上定义 @ApiResponse,但没有成功。

SpringFox 中尚不存在该功能,尽管他们已经找人来实现它很长一段时间了。

https://github.com/springfox/springfox/issues/521