Joh*_*ohn 3 java validation spring spring-mvc
我有一个Spring控制器,用hibernate验证器验证传入的请求.
当请求无效时,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);
}
}
Run Code Online (Sandbox Code Playgroud)
我需要像下面的示例,但这不起作用:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e, CustomObject obj) {
// do something with CustomObject
}
Run Code Online (Sandbox Code Playgroud)
如果你想对异常处理程序中验证失败的对象做一些事情,你可以这样检索它BindingResult:
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response handleInvalidRequest(MethodArgumentNotValidException e) {
CustomObject ce = (CustomObject) e.getBindingResult().getTarget();
// do something with CustomObject
}
Run Code Online (Sandbox Code Playgroud)
您还可以查看Spring JavaDoc以获取@ExceptionHandler注释,以查看受支持的异常处理程序方法参数类型的列表:
使用此注释注释的处理程序方法允许具有非常灵活的签名.它们可以按任意顺序包含以下类型的参数:
- 异常参数:声明为一般异常或更具体的异常.如果注释本身不通过其value()缩小异常类型,这也可以作为映射提示.
- 请求和/或响应对象(Servlet API或Portlet API).您可以选择任何特定的请求/响应类型,例如ServletRequest/HttpServletRequest或PortletRequest/ActionRequest/RenderRequest.请注意,在Portlet的情况下,显式声明的action/render参数也用于将特定请求类型映射到处理程序方法(如果没有给出区分action和render请求的其他信息).
- 会话对象(Servlet API或Portlet API):HttpSession或PortletSession.此类型的参数将强制存在相应的会话.因此,这样的论证永远不会是空的.请注意,会话访问可能不是线程安全的,特别是在Servlet环境中:如果允许多个请求同时访问会话,请考虑将"synchronizeOnSession"标志切换为"true".
- WebRequest或NativeWebRequest.允许通用请求参数访问以及请求/会话属性访问,而不与本机Servlet/Portlet API绑定.
- 当前请求区域设置的区域设置(由最可用的区域设置解析程序确定,即Servlet环境中配置的LocaleResolver和Portlet环境中的门户区域设置).
- InputStream/Reader用于访问请求的内容.这将是Servlet/Portlet API公开的原始InputStream/Reader.
- OutputStream/Writer用于生成响应的内容.这将是Servlet/Portlet API公开的原始OutputStream/Writer.