这篇文章主要给大家介绍了关于Spring boot validation校验方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言
接触springboot一年多,是时候摆脱这种校验方式了233 ,每个参数都if判断,一眼看过去就是很low的程序员。
Validation有了这个插件就再也不用这样去校验参数了,可以让我们在项目中不用浪费很多时间在参数校验这里,从而更专注于业务逻辑
正文
首先引入依赖
org.springframework.bootspring-boot-starter-web
这里创建一个用户的DTO对象
@Data @ApiModel("用户-表单对象") public class SportsUserCreatForm{ @ApiModelProperty(value="用户唯一标识",example = "0") @NotNull(groups = {Update.class}) private long id; @ApiModelProperty(value = "所属机构唯一标识(冗余字段)", example = "0") private long organizationId; @ApiModelProperty("登录用户名") @NotBlank(message = "用户名不能为空") @Length(max = 10, message = "用户名最长为10位") private String loginName; @ApiModelProperty("密码") private String password; @ApiModelProperty("手机号") private String phone; @ApiModelProperty("邮箱") private String email; @ApiModelProperty("性别( 'MALE', 'FEMALE' )") @NotNull(message = "用户性别不能为空") private SportsUserEnumGender gander; @ApiModelProperty(value = "出生日期-13位时间戳",example = "0") private long birthday; @ApiModelProperty("身份证号") private String idNumber; @ApiModelProperty("用户昵称") private String nickname; }
在controller层添加@Validated注解,添加注解之后spring就会逐个校验DTO中加了校验注解的字段,完全通过才可以进入业务处理,否则就会抛出MethodArgumentNotValidException异常
@PostMapping("user/add") @RequiresAuthentication @ApiOperation("添加用户") public SportsUser addUser(@Validated @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }
一般项目来说抛出异常都会有约定好的JSON格式返回错误码和错误信息,如果不处理就无法按照约定格式返回。这里我们可以通过声明全局异常处理类来拦截异常并将异常处理成前端能操作的JSON数据。(这里只需要关注MethodArgumentNotValidException异常)
@Slf4j @Order(Ordered.HIGHEST_PRECEDENCE) @RestControllerAdvice public class GlobalExceptionAdvice { @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseBody public ResponseEntity handleBeanValidation(HttpServletResponse res, MethodArgumentNotValidException e) throws Exception{ res.setStatus(HttpStatus.OK.value()); List errors = e.getBindingResult().getAllErrors(); ObjectError error = errors.get(0);// 如果有多个异常,这里只取第一个异常。没有必要把所有异常都抛出(错就是错,第一个校验都没通过,自然也轮不到第二个校验。) String json = JsonUtils.obj2json(error); Map map = JsonUtils.json2map(json); OkMessage result = new OkMessage(); result.setMsg("请求参数错误"e.getBindingResult().getFieldError().getDefaultMessage() + "]"); result.setCode("PARAM-000001"); return new ResponseEntity(result, HttpStatus.OK); } }
分组校验
有的人就要发问了,"啊,你这校验不行啊,我在添加的时候id是自动生成的不需要校验,编辑的时候就需要校验id了,我是不是要建两个一模一样的DTO,这样岂不是显得我很憨?!这不是增加无用代码吗?差评!" 其实不然,在此我们可以用到 groups 属性来解决此场景下的问题。声明分组注意:在声明分组的时候尽量继承 extend javax.validation.groups.Default。 否则,在你声明@Validated(Update.class)的时候,就会出现你在默认没添加groups = {}的时候的校验组@Email(message = "邮箱格式不对")不会自动校验,因为默认的校验组是groups = {Default.class}。import javax.validation.groups.Default; /** * 数据新增分组 */ public interface Create extends Default { }import javax.validation.groups.Default; /** * 数据更新分组 */ public interface Update extends Default { }修改Controller中的@Validated注解,声明校验分组(下面用的是Create.class所以并不会校验id)@PostMapping("user/add") @RequiresAuthentication @ApiOperation("添加用户") public SportsUser addUser(@Validated(Create.class) @RequestBody SportsUserCreatForm user) throws Exception{ return userBiz.addUser(user); }下面附上注解说明
验证注解
验证的数据类型
说明
@AssertFalse
Boolean,boolean
验证注解的元素值是false
@AssertTrue
Boolean,boolean
验证注解的元素值是true
@NotNull
任意类型
验证注解的元素值不是null
@Null
任意类型
验证注解的元素值是null
@Min(value=值)
BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存储的是数字)子类型
验证注解的元素值大于等于@Min指定的value值
@Max(value=值)
和@Min要求一样
验证注解的元素值小于等于@Max指定的value值
@DecimalMin(value=值)
和@Min要求一样
验证注解的元素值大于等于@ DecimalMin指定的value值
@DecimalMax(value=值)
和@Min要求一样
验证注解的元素值小于等于@ DecimalMax指定的value值
@Digits(integer=整数位数, fraction=小数位数)
和@Min要求一样
验证注解的元素值的整数位数和小数位数上限
@Size(min=下限, max=上限)
字符串、Collection、Map、数组等
验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小
@Past
java.util.Date,java.util.Calendar;Joda Time类库的上一篇:Java持久层框架MyBatis简单实例下一篇:java实现仿windows 字体设置选项卡实例 热门搜索:
Spring boot
spring-boot
Spring-boot-devTools
实例方法
spring-boot-starter
相关文章
spring boot validation参数校验实例分析
2021-10-18阅读(8853)评论(0)推荐()这篇文章主要介绍了spring boot validation参数校验,结合实例形式分析了spring boot validation进行数据有效性验证的相关操...
Spring boot validation校验方法实例
2021-09-10阅读(3012)评论(0)推荐()这篇文章主要给大家介绍了关于Spring boot validation校验方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...
Spring boot进行参数校验的方法实例详解
2021-09-19阅读(6826)评论(0)推荐()这篇文章主要介绍了Spring boot进行参数校验的方法实例详解,非 常不错,具有参考借鉴价值,需要的朋友参考下吧
Spring自带的校验框架Validation的使用实例
2021-10-19阅读(7720)评论(0)推荐()今天小编就为大家分享一篇关于Spring自带的校验框架Validation的使用实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟...
Spring-Validation 后端数据校验的实现
2021-10-12阅读(6061)评论(0)推荐()这篇文章主要介绍了Spring-Validation 后端数据校验的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...
Java Validation方法入参校验实现过程解析
2021-10-12阅读(6452)评论(0)推荐()这篇文章主要介绍了Java Validation方法入参校验实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...
SpringMVC实现Validation校验过程详解
2021-11-18阅读(9866)评论(0)推荐()这篇文章主要介绍了SpringMVC实现Validation校验过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...
取消
有人回复时邮件通知我
提交评论
© 2021 编程之家
工信部备案号:琼ICP备2022000316号
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。