JAVA Spring MVC 整合validator踩过的坑

由于做前后端分离的项目,后端需要校验传入的参数,在网上搜了不少资料发现通用的是JAVA WEB 整合Hibernate Validator校验框架比较合适,基本上能解决大部分问题。比如这篇博文:http://docs.jboss.org/hibernate/validator/4.2/reference/zh-CN/html_single/#validator-usingvalidator-validationgroups

在使用的过程中,发现了一些问题:

 问题1:@NotBlank() 这个注解校验数据类型为Long的参数时会报错。

答案1:@NotBlank()此注解只能用到字符串上。

问题2:如果在Controller中要对单个参数添加校验,添加什么配置:

答案2:1.在类名上添加@Validated注解。

             2.在spring-mvc.xml配置文件中加上

<bean   class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor" /> 

问题3:一个注解被分组后,还会在Default组中吗?

答案3:否

问题4:传入包含非数字的字符串,往类型为Long的字段上赋值时,报类型不匹配的错误,是否能够拦截校验。

答案4:经测试,不能校验。猜测是只有字段赋值成功后,才能对所赋的值校验。所以,校验无法拦截。

问题5:如果将错误提示的乱码改为友好性的错误提示:

答案5:实现对异常的拦截,当错误在Bean的注解时,注解异常拦截如下:

     @ExceptionHandler(BindException.class)
     @ResponseStatus(HttpStatus.OK)
     @ResponseBody

    当错误实在controller层单个参数的异常时,注解异常拦截如下:

    @ExceptionHandler(ConstraintViolationException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.BAD_REQUEST)

其他:如果参数添加了校验,那么只有有值包括空或者空格,对此值均会校验。

各位大牛,如果有什么疑问请不吝赐教。后面如有问题还会补充

猜你喜欢

转载自blog.csdn.net/jinger_000/article/details/82781710