Spring と Jackson で適切なエラー メッセージを生成するのに問題があります。シナリオ: 解析エラーを引き起こす可能性のあるカスタム モデル@ResponseBody
(以下を参照) を持つ 2 つの属性を持つモデルを持つコントローラー。ここで、これらのフィールドの解析が失敗した場合に適切なエラー メッセージを返したいと考えています (たとえば、 に対して無効な文字列を取得した場合Date
)。
400 Bad Request
解析エラーが発生した場合、Spring はそれをキャッチし、HTML 本文を含む応答を返します。独自の を実装することはできますがHandlerExceptionResolver
、この種の例外をキャッチして意味のあるエラー メッセージを生成します。残念ながら、最初の解析エラーしか検出できず、おそらく 2 番目の解析エラーは検出できません。
では、すべての解析/逆シリアル化エラーを収集し、すべての問題で適切なエラー メッセージを生成する方法はありますか?
Jackson 1.7.1 と Spring 3.2.2 を使用しています。
いくつかのコード例:
TimeController.java
@Controller
@RequestMapping("/time")
public class TimeController {
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody
TimeDocument create(@RequestBody TimeDocument entity) {
// magic
return entity;
}
}
TimeDocument.java
public class TimeDocument {
public String name;
public Date date1;
public Date date2;
}
リクエスト 1:を受け取ります200 OK
。
{
"name": "test",
"date1": 123,
"date2": 1234
}
リクエスト 2:を受け取りますが400 Bad Request
、「日付 1 の形式が無効です。」のような適切なエラー メッセージを生成できます。
{
"name": "test",
"date1": "crap",
"date2": 1234
}
リクエスト 3:を受け取りますが400 Bad Request
、「日付 1 の形式が無効です。日付 2 の形式が無効です。」のような適切なエラー メッセージを生成できません。
{
"name": "test",
"date1": "crap",
"date2": "crap"
}