147

jQueryを使用$.getJSON()して、単純なSpringMVCバックエンドへの非同期呼び出しを行っています。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(...) {
    ...
}

そうでない場合、ここで使用する適切な構文は何ですか?

4

6 に答える 6

273

voidを返すことができます。その後、@ ResponseBodyを必要としない@ResponseStatus(value = HttpStatus.OK)でメソッドをマークする必要があります。

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

getメソッドのみが暗黙的に200ステータスコードを返します。他のすべてのメソッドは、次の3つのいずれかを実行します。

  • voidを返し、メソッドにマークを付けます@ResponseStatus(value = HttpStatus.OK)
  • オブジェクトを返し、それをマークします@ResponseBody
  • HttpEntityインスタンスを返す
于 2012-10-11T12:43:16.973 に答える
44

適切なヘッダーを持つResponseEntityを返すだけです。

@RequestMapping(value = "/updateSomeData" method = RequestMethod.POST)
public ResponseEntity updateDataThatDoesntRequireClientToBeNotified(...){
....
return new ResponseEntity(HttpStatus.OK)
}
于 2012-10-11T12:42:26.063 に答える
10

「ResponseEntity」オブジェクトを返すことができます。「ResponseEntity」オブジェクトを使用すると、応答オブジェクト (応答本文と HTTP ステータス コードを含む) を構築するときと、応答オブジェクトから情報を取得するときの両方で非常に便利です。

getHeaders()、getBody()、getContentType()、getStatusCode() などのメソッドにより、ResponseEntity オブジェクトの読み取り作業が非常に簡単になります。

HTTP ステータス コード 204 (コンテンツなし) で ResponseEntity オブジェクトを使用する必要があります。これは、特に、リクエストが適切に処理され、レスポンス ボディが意図的に空白であることを指定するためのものです。複数のクライアント アプリケーションで使用される予定の API を作成する場合は特に、適切なステータス コードを使用して正しい情報を伝えることが非常に重要です。

于 2015-08-13T18:41:01.813 に答える
2

void を返すことに問題はありません。リクエストに対して@ResponseBodyはそうすべきです。POST

他の人が成功ステータスについて言及しているように、代わりに HTTP ステータス コードを使用して、例外ハンドラー ルーチン内でエラーを定義します。通常のメソッドは、必要な応答コードを返します200。例外ハンドラは、エラー オブジェクトと別のコード (つまり500) を返すことができます。

于 2013-12-19T04:35:11.420 に答える