Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring 3.0 MVC自定义WebArgumentResolver跳过验证_Java_Spring_Validation_Spring Mvc - Fatal编程技术网

Java Spring 3.0 MVC自定义WebArgumentResolver跳过验证

Java Spring 3.0 MVC自定义WebArgumentResolver跳过验证,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我们有两个@RequestMapping带注释的控制器方法来做这些事情。他们每个人都有一个以上的论点,我们希望受到约束。例如: @RequestMapping(value = "/a/b", method = RequestMethod.GET) @ResponseBody public Response getAB(ARequest aRequest, BRequest bRequest) throws ServiceException { ... } 这显然效果不错。然而,我们需求

我们有两个
@RequestMapping
带注释的控制器方法来做这些事情。他们每个人都有一个以上的论点,我们希望受到约束。例如:

@RequestMapping(value = "/a/b", method = RequestMethod.GET)
@ResponseBody
public Response getAB(ARequest aRequest, BRequest bRequest) throws ServiceException {
    ...
}
这显然效果不错。然而,我们需求中的一个怪癖是,我们得到了包含下划线的请求参数。例如在上面的端点上,我们将得到一个如下请求:
http://x:8000/a/b?req_param=1
。这会导致默认Spring绑定失败,因为在我们希望绑定的对象中,我们定义了
req_-param
camel-cased(
reqParam
),而不是在Java代码中使用下划线

为了解决这个问题,我们已经实现了我们自己的注释(
@Camelize
)和我们自己的自定义
WebArgumentResolver
,我们已经在Spring上下文中注册了它们。然后,我们用
@Camelize
注释控制器方法参数,这会导致自定义
WebArgumentResolver
介入并更正绑定。这也很好

现在问题出现了,更具体地说,当我们想要验证我们的论点时,这似乎失败了。例如,继续上面的示例:

@RequestMapping(value = "/a/b", method = RequestMethod.GET)
@ResponseBody
public Response getAB(@Camelize @Valid ARequest aRequest, Errors aRequestErrors, BRequest bRequest) throws ServiceException {
    ...
}
此操作失败,出现异常:
java.lang.IllegalStateException:Errors/BindingResult参数声明时没有前面的模型属性。检查您的处理程序方法签名

我们似乎无法同时使用自定义的
WebArgumentResolver
和使用
@Valid
进行验证。我们已经将其缩小到定制的
WebArgumentResolver
,从这个意义上讲,只要它不返回
未解析的
,Spring MVC就不会麻烦验证并抛出上面的异常

  • 有人能证实这是预期的行为吗
  • 这有什么办法吗?目前,我们正在考虑删除自定义的
    WebArgumentResolver
    ,并将其替换为一个过滤器,但对于我们所需要的内容来说,这似乎非常麻烦
谢谢


编辑:我们使用的是Spring 3.0.5。

我想在这种情况下,您不能使用错误作为参数。看看是否helps@vinay好链接。这个问题似乎确实与
BindingResult
参数有关。评论中也有一个有趣的“变通方法”。值得一试。