SpringBoot整合Hibernate Validator实现参数验证功能

网友投稿 306 2022-12-04


SpringBoot整合Hibernate Validator实现参数验证功能

在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节。但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码。这里可以引用Hibernate Validator来解决这个问题,直接在实体类进行参数校验,验证失败直接返回错误信息给前端,减少controller层的代码量。

一、xml引入Hibernate Validator

org.hibernate.validator

hibernate-validator

6.1.5.Final

二、通过注解在实体类进行参数校验

@Data

public class UserModel {

@NotNull(message = "用户名称不能为空!")

private String userName;

@NotNull(message = "age不能为null!")

@Range(min = 1, max = 888, message = "范围为1至888")

private Integer age;

/**

* 日期格式化转换

*/

@NotNull(message = "日期不能为null!")

private Date date;

}

这里用到的参数校验的注解有@NotNull和@Range,message是到时候我们返回给前端的信息,注解的具体意思如下:

@Null 被注释的元素必须为null

@NotNull 被注释的元素不能为null

@AssertTrue 被注释的元素必须为true

@AssertFalse 被注释的元素必须为false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值

@Size(max,min) 被注释的元素的大小必须在指定的范围内。

@Digits(integer,fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past 被注释的元素必须是一个过去的日期

@Future 被注释的元素必须是一个将来的日期

@Pattern(value) 被注释的元素必须符合指定的正则表达式。

@Email 被注释的元素必须是电子邮件地址

@Length 被注释的字符串的大小必须在指定的范围内

@NotEmpty 被注释的字符串必须非空

@Range 被注释的元素必须在合适的范围内

三、controller层的方法加上@Valid注解

@PostMapping("/testPost")public Object testPost(@RequestBody @Valid UserModel uscjRpBerModel, BindingResult result){

if(result.hasErrors()){ for(ObjectError error:result.getAllErrors()){

return error.getDefaultMessage();

}

}

return userModel;

}

controller层这里只需要在实体类的前面加上@Valid注解,这个注解可以实现数据的验证。这里BindingResult是存储了校验时的错误信息,验证有误时将错误信息返回给前端。这里不使用BindingResult的时候,控制台会报MethodArgumentNotValidException,这里可以通过自定义异常类来捕捉它,然后去掉BindingResult,以及难看的if判断。

四、自定义异常类捕捉MethodArgumentNotValidException

@RestControllerAdvice

public class GlobalExceptionAdvice {

@ExceptionHandler(value = MethodArgumentNotValidException.class)

public jsonData validException(MethodArgumentNotValidException e) {

//验证post请求的参数合法性

MethodArgumentNotValidException notValidException = e;

String msg = notValidException.getBindingResult().getFieldError().getDefaultMessage();

return JsonData.buildError(msg);

}

}

使用PostMan的测试结果如下:

具体的代码可以在我的gitee上面 查看 ,springboot_validator


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring容器初始化及问题解决方案
下一篇:JAVA集合框架专题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~