これがSpring 3.2 MVCを使用して実行可能かどうかは本当にわかりません。
私のコントローラーには以下のように宣言されたメソッドがあります:
_@RequestMapping(method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
public @ResponseBody List<Foo> getAll(){
return service.getAll();
}
_
質問:
@ResponseStatus(HttpStatus.OK)
の意味は何ですか?HttpStatus.OK
_ステータスコードを返すことを意味しますか。@ResponseStatus(HttpStatus.OK)
は、処理メソッドが正常に戻った場合に要求がOKを返すことを意味します(この場合、デフォルトの応答ステータスはHttpStatus.OK
であるため、この注釈は冗長です)。ハンドラーが例外をスローした場合、注釈は適用されません。
同じ方法で条件に応じて複数の応答ステータスを処理するにはどうすればよいですか?
その質問 既に質問されています 。
例外の発生時に応答ステータスを変更できますか
2つの選択肢があります。例外クラスが独自のクラスの場合、@ResponseStatus
を使用して例外クラスに注釈を付けることができます。もう1つの選択肢は、@ExceptionHandler
アノテーションが付けられた例外ハンドラーをコントローラークラスに提供し、例外ハンドラーに応答ステータスを設定させることです。
ResponseEntityを直接返す場合、その中にHttpStatusを設定できます。
// return with no body or headers
return new ResponseEntity<String>(HttpStatus.NOT_FOUND);
404以外のエラーを返したい場合は、 HttpStatusには他の多くの値があります から選択します。
@ResponseStatus
に複数のステータス値を設定することはできません。私が考えることができる1つのアプローチは、@ExceptionHandler
ではない応答ステータスにHttpStatus.OK
を使用することです
@RequestMapping(value = "login.htm", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.OK)
public ModelAndView login(@ModelAttribute Login login) {
if(loginIsValidCondition) {
//process login
//.....
return new ModelAndView(...);
}
else{
throw new InvalidLoginException();
}
}
@ExceptionHandler(InvalidLoginException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ModelAndView invalidLogin() {
//handle invalid login
//.....
return new ModelAndView(...);
}