1. ホーム
  2. spring

[解決済み] Spring Boot Rest Controllerは、異なるHTTPステータスコードを返すには?

2022-08-28 03:05:36

質問

Spring Bootを使用して簡単なREST APIを行っていますが、何か失敗したときに正しいHTTPステータスコードを返したいと思っています。

@RequestMapping(value="/rawdata/", method = RequestMethod.PUT)
@ResponseBody
@ResponseStatus( HttpStatus.OK )
public RestModel create(@RequestBody String data) {
    // code ommitted..
    // how do i return a correct status code if something fails?
}

SpringとSpring Bootの初心者なので、基本的な質問は、何かがOKまたは失敗したときに異なるステータスコードを返すにはどうすればよいですか?

どのように解決するのですか?

いくつかの方法があります。かなり良い方法は、例外と呼ばれる処理用のクラスを使用することです。 @ControllerAdvice :

@ControllerAdvice
class GlobalControllerExceptionHandler {
    @ResponseStatus(HttpStatus.CONFLICT)  // 409
    @ExceptionHandler(DataIntegrityViolationException.class)
    public void handleConflict() {
        // Nothing to do
    }
}

また HttpServletResponse をコントローラメソッドに渡して、レスポンスコードを設定することもできます。

public RestModel create(@RequestBody String data, HttpServletResponse response) {
    // response committed...
    response.setStatus(HttpServletResponse.SC_ACCEPTED);
}

詳しくは、こちらのブログ記事をご覧ください。 Spring MVCの例外処理


注意事項

Spring MVCでは @ResponseBody アノテーションは冗長です。 @RestController アノテーションに含まれています。