2017-10-05 80 views
1

我正在使用Swagger來處理我的REST文檔。我已經設置好了,並且可以在SwaggerUi上訪問,並且還可以看到我配置的所有REST資源及其受支持的方法。Swagger - 聲明異常的渲染響應狀態

在我的後端我有一個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); 
} 

在默認配置,揚鞭僅示出了箱201儘可能響應代碼。儘管409也是可能的。

當然,我可以將@ApiResponse(code = 409, message = "Role already exists")定義添加到createRole()方法,但這似乎是雙重信息,因爲我已經暗示拋出異常。

我該如何告訴大家,如果一個ResourceAlreadyExistsException可以被拋出,409也是一個可能的響應碼?

我已經嘗試在ResourceAlreadyExistsException上定義@ApiResponse,但這並不奏效。

+0

杜林的Derb角色實體被標記爲獨特的(角色名)?因爲休眠不知道角色已經存在或沒有給出一個唯一的約束 –

回答

1

這個特性在SpringFox中並不存在,儘管他們一直在尋找某個人實現它的時間已經很長一段時間了。

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

+0

非常感謝提示。也許我偶爾會找時間來嘗試一下。這會讓生活變得如此簡單。 –