栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 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

到此这篇关于SpringBoot整合Hibernate Validator实现参数验证功能的文章就介绍到这了,更多相关SpringBoot 参数验证 内容请搜索考高分网以前的文章或继续浏览下面的相关文章希望大家以后多多支持考高分网!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/133691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号