0
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<Country> getListOfCountries() {

    return countryService.listAll();
}

オブジェクトのjsonビューが表示されますが、サービスがnullを返す場合は、エラーメッセージを表示したいのですが、何か提案はありますか?

4

2 に答える 2

2

まず第一に、これが質問に直接答えない場合でも、オブジェクトは空のコレクションではなく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を参照してください。

于 2013-01-09T23:44:30.817 に答える
2

あなたにはいくつかのオプションがあると思います:

  1. null を返すと、空の文字列 "" として返されます。おそらくそれを探して処理できます。

  2. リストの上にラッパー型を返します。ラップされたリストがnullの場合、このようなものがクライアントに返さ{"countries":null}れ、JavaScriptの最後でより簡単に処理できます。

  3. 500 ステータス コードとしてクライアントに伝播する例外をスローすると、JavaScript 側でエラー ハンドラを使用してこのシナリオを処理できます。

于 2013-01-09T22:47:09.953 に答える