我在使用 Spring 和 Jackson 生成正确的错误消息时遇到问题。场景:具有自定义模型的控制器@ResponseBody
(见下文)具有两个属性的模型,这可能会导致解析错误。Date
现在,如果这些字段的解析失败(例如,得到一个无效的字符串 a ),我想返回一个正确的错误消息。
如果发生解析错误,Spring 将捕获它并返回400 Bad Request
带有 HTML 正文的响应。虽然我能够实现自己的HandlerExceptionResolver
,但它会捕获这种异常以生成有意义的错误消息。不幸的是,我只能捕捉到第一个解析错误,而不是可能的第二个。
那么,有没有办法收集所有解析/反序列化错误并生成包含所有问题的正确错误消息?
我正在使用 Jackson 1.7.1 和 Spring 3.2.2。
一些示例代码:
时间控制器.java
@Controller
@RequestMapping("/time")
public class TimeController {
@RequestMapping(method = RequestMethod.POST)
public @ResponseBody
TimeDocument create(@RequestBody TimeDocument entity) {
// magic
return entity;
}
}
时间文档.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"
}