1. ホーム
  2. java

[解決済み] Spring MVCの@ResponseBodyメソッドがStringを返すときにHTTP 400エラーで応答するにはどうすればよいですか?

2022-03-23 15:46:33

質問

Spring MVCを使用して、シンプルなJSON APIを作成しています。 @ResponseBody というようなベースのアプローチ。(すでにJSONを直接生成するサービス層を持っています)。

@RequestMapping(value = "/matches/{matchId}", produces = "application/json")
@ResponseBody
public String match(@PathVariable String matchId) {
    String json = matchService.getMatchJson(matchId);
    if (json == null) {
        // TODO: how to respond with e.g. 400 "bad request"?
    }
    return json;
}

質問ですが、与えられたシナリオの中で HTTP 400 エラーで応答する最もシンプルでクリーンな方法は何ですか? ?

というようなアプローチには出会いましたが。

return new ResponseEntity(HttpStatus.BAD_REQUEST);

...しかし、私のメソッドの戻り値の型はStringであり、ResponseEntityではないので、ここでは使えません。

どうすればいいですか?

戻り値の型を ResponseEntity<> とすると、以下のように400になります。

return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

そして正しいリクエストのために

return new ResponseEntity<>(json,HttpStatus.OK);

アップデイト1

spring 4.1以降では、ResponseEntityにヘルパーメソッドがあり、以下のように使用することができます。

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);

そして

return ResponseEntity.ok(json);