2011-12-28 4 views
0

JSONを介してクライアントと通信するSpring MVCベースのアプリケーションサーバーがあります。 クライアントが実行できるクエリの1つが「保留中のメッセージはありますか?」です。 これを行うには、クライアントは認証オブジェクトを作成し、それをサーバーに送信します。サーバは保留中のメッセージのリストを返します。for ex. List<PendingMessage>クライアントに例外について通知する

今、保留中のメッセージでない場合、nullを返します。問題は、クライアントに通知する方法です。例えば、DB接続が失われた、認証が間違っていた、またはクライアントと共有したい他の例外があるなどのエラーが発生した場合は、

答えて

0

コードが投げることのできるさまざまな種類の例外をキャッチすることができます。それに基づいて独自のカスタムメッセージ&を定義してクライアントに送信することができます。クライアント側では、例外のgetMessage()を実行するだけです。これは問題を解決するはずです。

0

これを行うには、例外をスローするだけです。 SpringMVCは、例外を標準のHTTPステータスコード(200秒、400秒、500秒など)にマップします。 Javaでコーディングするときと同じように、独自のニーズに合わせてカスタム例外を作成することができます。

0

クライアントとサーバーの両方を設計している場合、おそらく何らかの種類のプロトコルを定義したいと思うかもしれませんが、これは楽しいものです。あなたはあなたのウェブサーバを、与えられたリクエストに対して定義されたフォーマットでデータを返すrpcサーバと考えることができます。

例えば

、HTTPステータスコードを使用して、正常な応答は次のようなデータが返される可能性があります:

{ 
    status: 200, 
    message: "OK", 
    data: { 
     name: John Doe, 
     age: 31 
    }, 
    error: null 
} 

エラーが発生し、要求:

{ 
    status: 400, 
    message: "Bad Request", 
    data: null, 
    error: "Database request timed out" 
} 

あなたはかなりあるだろうtry catchブロックを使用して、クライアントが処理できる問題の概要を示す適切なJSONレスポンスに変換することができます。

リクエストにサーブレットに到達する前にエラーが発生した場合、要求を行うAPIはたぶんonErrorコールバックを公開して、クライアントにエラーを通知するために使用できます。

+0

私はそこに素敵なヘッダーを持っていますが、私のサーバーはDBから取得したオブジェクトをJSON形式(ジャージー+ジャクソン)に自動的に変換しますので、あなたが提供するものは本当にできません。 – stdcall

+0

"データ"プロパティがデータベースから返されたjsonデータであるカスタムjsonレスポンスにそれをラップすることができます...本当に問題にはなりません。特に、java用のjsonシリアライゼーションAPIが多数あるため –

+0

私は通常、org.jsonを使用しますが、Jackson JSONプロセッサー・ライブラリーの最初の一見から、これは何かシンプルなものを許すことを示しています –

0

HTTP応答ステータスコードで開始します。たとえば、DB接続に問題がある場合は、500 Internal Server Errorを返します。

この方法では、クライアントに必要なすべての情報が提供されない場合があります。したがって、応答本体にJSONとして詳細を提供することもできます。このJSONを必要に応じて構造化します。クライアントアプリケーションが応答を受け取った後に特定のURLに移動するようにするには、そのURLを応答に含めることを検討してください。

最後に、200 OKとレスポンスボディのエラーを組み合わせるのは悪いフォームです。私はこれを前にやっているのを見ましたが、それは迷惑です。

関連する問題