首页 科技正文

allbet代理:SpringBoot整合Hibernate Validator实现参数验证功效

admin 科技 2020-06-17 30 0

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

一、xml引入Hibernate Validator

<!-- 验证器 -->
<dependency>
      <groupId>org.hibernate.validator</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>6.1.5.Final</version>
</dependency>

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

@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 userModel, 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

,

欧博allbet客户端

欢迎进入欧博allbet客户端(Allbet Game):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。

版权声明

本文仅代表作者观点,
不代表本站Allbet的立场。
本文系作者授权发表,未经许可,不得转载。

评论