2016-03-30 18 views
0

私はSpringフレームワークを使用してJavaでRESTfulなサービスを開発しています。私のサービス層で例外が発生した場合は、Httpステータスコードにバインドされた例外がスローされます。たとえば、ユーザーの認証が失敗すると、401のステータスコードで応答を送信します。Springフレームワークを使用してカスタム応答フレーズを設定するにはどうすればよいですか?

return new ResponseEntity<>(HttpStatus.valueOf(statusCode)); 

私は、RESTfulサービスの消費者に対して、コードだけでなくテキストの説明を送信する彼の要求に間違っていることを説明したいと思います。レスポンスボディにカスタムメッセージを追加するか、デフォルトのレスポンスフレーズを置き換えることで、これを行うことができます。たとえば、401の場合はUnauthorizedUser does not existまたはIncorrect passwordに置き換えます。

問題はHttpStatusからorg.springframework.httpまでです。エラーコードはテキスト応答フレーズにバインドされています。

どういうわけかそれらの応答フレーズを無効にすることができますか、別の方法が必要ですか?

デフォルトのレスポンスフレーズを置き換えることをお勧めしますか、説明メッセージをレスポンスボディに入れる方が良いでしょうか?

+0

'setStatus(int sc、String sm)'メソッドがありますが、残念ながら期待通りに動作しません。私はそれを使用しようとすると、既存のコードのデフォルトのレスポンスフレーズを変更せず、カスタムコード、つまり488にメッセージを追加しません。これは 'sendError(int sc、String msg)'を使うことをお勧めします。レスポンスフレーズは変更されません。 [ – Derp

答えて

0

これは動作するはずです:

まず、あなたはそれがのMediaTypeがjavax.ws.rs.core.MediaTypeこれは、テキスト、プレーンな応答を生成しますインポートからであるあなたの@RequestMappingproduces = {MediaType.TEXT_PLAIN}を追加することによって生成型にリクエストメソッドをバインドすることができます。

次に、返信することができます。 return new ResponseEntity<>(message, HttpStatus.UNAUTHORIZED);ここで、メッセージは表示するテキストメッセージです。

+0

これは、ヘッダーではなく、応答ボディにメッセージを追加します。 – Derp

+0

ヘッダーとして必要なことがわかりませんでした。ResponseEntityコンストラクターは、[API]のようにHttpHeadersを持つことができます。 ](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/ResponseEntity.html)しかし、私はHTTPのコードメッセージをオーバーライドするのは良い習慣ではないと思うHTTPは 私はあなたに指摘したことをするか、アプリケーションが読み込んで表示できる新しいヘッダーを定義します: HttpHeaders myHeaders = new HttpHeaders(); myHeaders.set( "MyResponseHeader"、 "MyValue"); return新しいResponseEntity <>( ""、myHeaders、HttpStatus.UNAUTHORIZED); – Hellzzar

関連する問題