Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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中为MethodArgumentNotValidException的@ExceptionHandler添加参数_Java_Spring_Validation_Spring Mvc - Fatal编程技术网

Java 在Spring中为MethodArgumentNotValidException的@ExceptionHandler添加参数

Java 在Spring中为MethodArgumentNotValidException的@ExceptionHandler添加参数,java,spring,validation,spring-mvc,Java,Spring,Validation,Spring Mvc,我有一个Spring控制器,它使用hibernate validator验证传入的请求 当请求无效时,验证程序将抛出MethodArgumentNotValidException。是否可以添加额外的类作为异常处理程序方法的参数 这就是我所拥有的: @RequestMapping(value = "/...", method = RequestMethod.POST) @ResponseBody public Response handleCustomObject(@Valid @RequestB

我有一个Spring控制器,它使用hibernate validator验证传入的请求

当请求无效时,验证程序将抛出
MethodArgumentNotValidException
。是否可以添加额外的类作为异常处理程序方法的参数

这就是我所拥有的:

@RequestMapping(value = "/...", method = RequestMethod.POST)
@ResponseBody
public Response handleCustomObject(@Valid @RequestBody CustomObject obj) {
  //..
}


@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e) {

    return getMissingMandatoryParametersResponse(e);

    }
}
我需要像下面这样的例子,但是这不起作用:

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e, CustomObject obj) {

 // do something with CustomObject
}

如果要对异常处理程序中未通过验证的对象执行某些操作,可以从
BindingResult
中检索该对象,如下所示:

@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e) {
    CustomObject ce = (CustomObject) e.getBindingResult().getTarget();
    // do something with CustomObject
}
您还可以查看Spring JavaDoc for annotation,以查看支持的异常处理程序方法参数类型列表:

允许使用此注释进行注释的处理程序方法 有非常灵活的签名。他们可能有相同的论点 以下类型,按任意顺序排列:

  • 异常参数:声明为一般异常或更具体的异常。如果 注释本身不会通过其 value()
  • 请求和/或响应对象(Servlet API或Portlet API)。您可以选择任何特定的请求/响应类型,例如ServletRequest/ HttpServletRequest或PortletRequest/ActionRequest/RenderRequest。 注意,在Portlet的情况下,显式声明的操作/呈现 参数还用于将特定请求类型映射到 handler方法(如果没有提供其他信息 区分操作请求和渲染请求)
  • 会话对象(Servlet API或Portlet API):HttpSession或PortletSession。此类型的参数将强制 相应的会话。因此,这样的争论永远不会发生 不能为空。请注意,在某些情况下,会话访问可能不是线程安全的 特别是在servlet环境中:考虑切换 如果允许多个请求,“synchronizeOnSession”标志变为“true” 同时访问会话
  • WebRequest或NativeWebRequest。允许通用请求参数访问以及请求/会话属性访问,而无需 绑定到本机Servlet/Portlet API
  • 当前请求区域设置的区域设置(由可用的最特定的区域设置解析程序确定,即配置的区域设置解析程序 在Servlet环境和Portlet中的门户语言环境中 环境)
  • 用于访问请求内容的InputStream/Reader。这将是Servlet/Portlet公开的原始InputStream/Reader API
  • 用于生成响应内容的OutputStream/Writer。这将是Servlet/Portlet公开的原始OutputStream/Writer API