私は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も可能ですが。
もちろん、の定義をcreateRole()
メソッドに追加することもできますが、これは例外をスローすることによって既に暗示しているので、これは二重の情報です。
ResourceAlreadyExistsException
をスローすることができる場合、409も可能な応答コードですか?
で@ApiResponse
を定義しようとしましたが、それが機能しませんでした。
Herr Derbロールエンティティは一意(roleName)としてマークされていますか?休止状態は分かりません。ロールはすでに存在しているかどうかは一意の制約を与えずに –