【问题标题】:@RequestBody validation in spring 3.0.5春季 3.0.5 中的 @RequestBody 验证
【发布时间】:2011-12-27 18:53:45
【问题描述】:

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

处理此问题的最佳方法是什么?
我正在使用 Spring 3.0.5。

【问题讨论】:

    标签: validation rest spring-mvc


    【解决方案1】:

    你可以这样处理异常

    @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

    【讨论】:

      【解决方案2】:

      如果你没有绑定到 3.0.x,我可以建议你升级 3.1,这是上个月完成的。

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

      【讨论】:

        猜你喜欢
        • 2017-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-18
        相关资源
        最近更新 更多