@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {
return countryService.listAll();
}
オブジェクトのjsonビューが表示されますが、サービスがnullを返す場合は、エラーメッセージを表示したいのですが、何か提案はありますか?
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {
return countryService.listAll();
}
オブジェクトのjsonビューが表示されますが、サービスがnullを返す場合は、エラーメッセージを表示したいのですが、何か提案はありますか?
まず第一に、これが質問に直接答えない場合でも、オブジェクトは空のコレクションではなくnullを返すべきではありません.Effective Java 2nd Edition、Item 43 / p.201で理由を見つけることができます.
そのため、国が見つからない状況が正常な場合は、カウントをチェックしてそれぞれのメッセージを表示するクライアント JS コードによって処理する必要があります。
何か問題が発生した場合は、例外をスローできます(Bijuが指摘したように+1)-例外が発生した理由を知っているため、例外をスローする必要があり、とにかくnullを返さないのはサービスだと思います。
Spring 3.2(Spring 3.2より前の応答本文を返すのは複雑です)で追加したいのは、JSONを返し、後でクライアントが処理できるHTTPステータスコードを設定する@ExceptionHandlerを設定できることです。ここでは、何らかのエラー コードを含むカスタム JSON 応答を返すことが最適だと思います。
@RequestMapping("/test")
@ResponseBody
public List<Country> getListOfCountries() {
//assuming that your service throws new NoCountriesFoundException();
//when something goes wrong
return countryService.listAll();
}
@ExceptionHandler(NoCountriesFoundException.class)
ResponseEntity<String> test() {
return new ResponseEntity<String>(
"We are sorry, our server does not know any countries yet.",
HttpStatus.I_AM_A_TEAPOT );
}
次に、JS コードで、返されたステータス コードに応じて特定の処理を実行できます。
また、異なるコントローラーで同じ宣言を避けるため@ExceptionHandler
に、Spring 3.2ではアノテーション付きクラス@ExceptionHandler
内に配置できます。@ControllerAdvice
詳細については、http ://static.springsource.org/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-exceptionhandlersおよび3.2 固有のものについてはhttp://www.springsource.org/node/3738を参照してください。
あなたにはいくつかのオプションがあると思います:
null を返すと、空の文字列 "" として返されます。おそらくそれを探して処理できます。
リストの上にラッパー型を返します。ラップされたリストがnullの場合、このようなものがクライアントに返さ{"countries":null}
れ、JavaScriptの最後でより簡単に処理できます。
500 ステータス コードとしてクライアントに伝播する例外をスローすると、JavaScript 側でエラー ハンドラを使用してこのシナリオを処理できます。