2017-08-08 1 views
0

、クライアントに返さ:内部エラーが発生し、あまりにも多くのデバッグ情報は、私の春のRESTコード内でスローされた例外がある場合、サーバは、クライアントに次のような何かを送り春RESTで

{ 
    "timestamp": 1502184648199, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "org.foo.DataAccessException", 
    "message": "SQL [select * from my_table]: Table does not exist", 
    "path": "/my-api" 
} 

Iライブシステムにこのようにインストールされていると、クライアントにあまりにも多くの内部情報が公開されることが懸念されます。それは、私たちのテーブル構造を示すSQL、またはExceptionにある可能性のある他の情報を含むかもしれません。 (これはテストシステムでのデバッグには便利だと認めますが)

この詳細情報がクライアントに送信されないようにするにはどうすればよいですか?

答えて

1

ExceptionHandlerを定義して、例外の場合のカスタム応答形式を定義することができます(このテストシステムでは、このように動作することが理想的です)。 ExceptionHandlerを定義し、デフォルトの応答形式をオーバーライドするだけです。 サンプルコード:

@ExceptionHandler({ Exception.class }) 
public ResponseEntity<Object> handleAll(Exception ex, WebRequest request) { 
    ApiError apiError = new ApiError(
     HttpStatus.INTERNAL_SERVER_ERROR, ex.getLocalizedMessage(), "error occurred"); 
    return new ResponseEntity<Object>(apiError, new HttpHeaders(), apiError.getStatus()); 
} 

Custom Error message spring rest

+0

を見て、私は、要求JSONが有効でない場合、これは今、このコードを任意の例外を実行するだけでなく、例外ではないだけということに気づきます。このコードがなければ、JSONが無効である(これは良い)ケースで400エラーが発生します。無効なJSON(400エラー)のためにSpringのデフォルトの動作を維持する方法はありますか?キャッチされない例外の場合にSpringが内部メッセージの詳細を例外メッセージに出力しないようにするこの新しい機能はありますか? –

+0

その場合、Springへの応答フォーマットsimillerで400エラーに対してExceptionHandlerを定義し、上で定義したようにcatch all Handlerを上記のままにする必要があります。 –

関連する問題