我在使用Spring和Jackson生成正确的错误消息时遇到了问题。方案:具有自定义模型的控制器@ResponseBody
(参见下文)具有两个属性的模型,可能导致解析错误。现在,如果解析这些字段失败(例如,获取Date
的无效字符串),我想返回适当的错误消息。使用Spring和Jackson处理错误
如果发生解析错误,Spring将捕获它并返回一个带有HTML主体的400 Bad Request
响应。尽管我能够实现我自己的HandlerExceptionResolver
,但它捕获了这种异常以生成有意义的错误消息。不幸的是,我只能捕获第一个解析错误,而不是第二个解析错误。
那么,有没有一种方法来收集所有的解析/反序列化错误,并生成一个适当的错误消息与所有问题?
我使用的是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"
}
由于我没有找到足够的解决方案,但是,我会找到另一种方式解决我的问题。 (例如,第二个客户端验证) – svenwltr