2

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"
}
4

1 に答える 1