2017-11-15 7 views
0

@RestControllerにはSpringがあります。私はクエリパラメータ?format=を使用して返されるコンテンツタイプを制御します(これは春の組み込み機能です)。Springのカスタムコンテンツタイプでエラーメッセージを返すには?

問題:content-typeがjson/xmlではなく、テキストまたはcsvの場合、返されたエラー応答をcsvに変換しようとします。どちらが失敗し、したがって私はAuthenticationExceptionのように返されませんが、HttpMediaTypeNotAcceptableExceptionです。

形式= JSON:??

{ 
    "timestamp": "2017-11-15T11:00:07.079+0000", 
    "status": 401, 
    "error": "Unauthorized", 
    "message": "Bad credentials", 
    "path": "..." 
} 

形式=のxml:?

<Map> 
    <timestamp>2017-11-15T11:00:21.590+0000</timestamp> 
    <status>401</status> 
    <error>Unauthorized</error> 
    <message>Bad credentials</message> 
    <path>...</path> 
</Map> 

形式= CSV:(私は直接テキストCSVファイルを作成し、いくつかのエンドポイントを提供します):

Response could not be created: org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation 

質問:私はどのようにフォーマットのパラメータがjson/xmlではないかのように、プレーンテキストのようなエラー応答をフォーマットするためにspringに指示できますか?

答えて

0

スプリングコントローラのアノテーションと例外ハンドラを使用することができます。こうして、あらゆる方法でエラーを捕捉し、一般的な方法で応答する。

@ControllerAdvice 
class YourControllerAdviceClass { 
    @ResponseStatus(value= HttpStatus.NOT_FOUND, reason="Exception occured") 
    @ExceptionHandler({ Exception.class }) 
    public YourReturnType handleAllException() { 
     return YourReturnType; 
    } 
} 

詳細については、この記事を読んで、エラー処理と応答の可能性に関するより多くのオプションを提供することができます。

http://www.baeldung.com/exception-handling-for-rest-with-spring

+0

しかし、春がcsv' 'に元の例外を変換しようとした後、これが唯一' HttpMediaTypeNotAcceptableException'をキャッチ。 'timestamp、status、error、message、path'フィールドの実行応答は、春、他の場所で生成されます。 – membersound

関連する問題