Java 在Spring中为MethodArgumentNotValidException的@ExceptionHandler添加参数
我有一个Spring控制器,它使用hibernate validator验证传入的请求 当请求无效时,验证程序将抛出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
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