我有一个REST控制器,我正在努力确保请求体是真正属于我认为的类型。
例如:
@Controller
public class myController{
@RequestMapping(method=RequestMethod.POST, value = "/addFoo", headers="...")
public @ResponseBody String addFoo(@RequestBody Foo){
...code to add a new Foo
}
}
不幸的是有人可以发布一个Bar对象而不是一个Foo对象,我想拦截那个事件并返回一个关于Barring my Foo的严厉措辞消息 - 而不是让Spring抛出映射错误并返回500内部服务器错误。
处理此问题的最佳方法是什么? 我正在使用Spring 3.0.5。
答案 0 :(得分:0)
你可以像这样处理
这样的例外@Controller
public class SimpleController {
// other controller method omitted
@ExceptionHandler(IOException.class)
public String handleIOException(IOException ex, HttpServletRequest request) {
return ClassUtils.getShortName(ex.getClass());
}
}
或通过定义HandlerExceptionResolvers
这两个都记录在这里:
答案 1 :(得分:0)
如果您不受3.0.x的约束,我建议您升级3.1,这是在过去一个月内完成的。
这是Spring 3.1版中新增的功能。请参阅Validation For @RequestBody Method Arguments