Validation @spring 3.0.5中的RequestBody验证

Validation @spring 3.0.5中的RequestBody验证,validation,rest,spring-mvc,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 } }

我有一个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对象,我想截获这种情况,并返回一条关于禁用Foo的措辞严厉的消息——而不是让Spring抛出一个映射错误并返回500个内部服务器错误

处理这个问题的最佳方法是什么?

我使用的是Spring 3.0.5。

您可以像这样处理异常

@Controller
public class SimpleController {

  // other controller method omitted

  @ExceptionHandler(IOException.class)
  public String handleIOException(IOException ex, HttpServletRequest request) {
    return ClassUtils.getShortName(ex.getClass());
  }
}
或者通过定义HandlerExceptionResolver

此处记录了这两种情况:


您可以像这样处理异常

@Controller
public class SimpleController {

  // other controller method omitted

  @ExceptionHandler(IOException.class)
  public String handleIOException(IOException ex, HttpServletRequest request) {
    return ClassUtils.getShortName(ex.getClass());
  }
}
或者通过定义HandlerExceptionResolver

此处记录了这两种情况:


如果您不受3.0.x的约束,我可以建议您使用上个月定稿的ugprade 3.1


它是Spring3.1版中新增的功能。请参见

如果您不受3.0.x的约束,我可以建议您使用ugprade 3.1,该版本已于上个月定稿

它是Spring3.1版中新增的功能。请看