1. ホーム
  2. java

[解決済み] Spring MVCコントローラのメソッドが値を返さなかった場合、何を返せばよいのでしょうか?

2022-05-08 03:04:12

質問

jQueryの $.getJSON() を使用して、シンプルな Spring MVC バックエンドに非同期で呼び出すことができます。Springコントローラのメソッドのほとんどは以下のようなものです。

@RequestMapping(value = "/someURL", method = RequestMethod.POST)
public @ResponseBody SomePOJO getSomeData(@ModelAttribute Widget widget,
    @RequestParam("type") String type) {
    return someDAO.getSomeData(widget, type);
}   

各コントローラが @ResponseBody をJSONとして、クライアントサイドが期待するものです。

しかし、リクエストがクライアント側に何のコンテンツも返すことになっていない場合はどうなるのでしょうか?持っていてもいいのでしょうか。

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public @ResponseBody void updateDataThatDoesntRequireClientToBeNotified(...) {
    ...
}

そうでない場合、ここで使うべき適切な構文は何でしょうか?

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

voidを返すなら、@ResponseStatus(value = HttpStatus.OK)をメソッドに記述すれば、@ResponseBodyは必要ありません。

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void updateDataThatDoesntRequireClientToBeNotified(...) {
    ...
}

getメソッドだけが200のステータスコードを暗黙のうちに返します。

  • voidを返し、そのメソッドに @ResponseStatus(value = HttpStatus.OK)
  • オブジェクトを返し、そのオブジェクトに @ResponseBody
  • を返します。 HttpEntity インスタンス