在Spring 3.0.5中验证@RequestBody

时间:2011-11-12 20:34:02

标签: validation rest spring-mvc

我有一个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。

2 个答案:

答案 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

这两个都记录在这里:

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers

答案 1 :(得分:0)

如果您不受3.0.x的约束,我建议您升级3.1,这是在过去一个月内完成的。

这是Spring 3.1版中新增的功能。请参阅Validation For @RequestBody Method Arguments