当前位置: 首页 > 后端技术 > Java

SpringBoot进行优雅的字段验证,写的很好!

时间:2023-04-02 02:00:38 Java

作者:何甜甜呢?\来源:juejin.cn/post/6913735652806754311前段时间提交codereview,同事提到一个代码规范缺陷:参数校验要放在controller层。应该如何验证参数?Controller层VSService层我在网上查了一些资料。一般建议在Controller层验证与业务无关的参数,在Service层验证与业务相关的数据。那么如何优雅漂亮的写参数校验呢?如果都是if-else,代码写的很low。幸运的是,有轮子可以使用常见的验证工具。使用HibernateValidate引入依赖org.hibernatehibernate-validator4.3.1.Final常用注解说明SpringBoot的使用姿势基础就不介绍了,推荐这个实用教程:https://www.javastack.cn/cate...需要配合Controller中的@Validated或@Valid注解使用。@Validated和@Valid注解的区别不是很大。一般来说,你可以选择一个。区别如下:虽然@Validated比@Valid更强大,它在@Valid之上提供了分组功能和验证排序功能,但一直没有在实际项目中使用。Hibernate-validate框架中的注解需要一起添加到实体中用于定义一个实体publicclassDataSetSaveVO{//唯一标识为空@NotBlank(message="useruuidisempty")//用户名即可只能是字母和数字@Pattern(regexp="^[a-z0-9]+$",message="用户名只能是字母和数字")@Length(max=48,message="用户uuid长度超过48字节")privateStringuserUuid;//数据集名称只能是字母和数字@Pattern(regexp="^[A-Za-z0-9]+$",message="数据集名称只能是字母和数字")//文件名是太长@Length(max=48,message="文件名太长")//文件名为空@NotBlank(message="文件名为空")privateStringname;//数据集描述最多256字节@Length(max=256,message="数据集描述长度超过256字节")//数据集描述为空@NotBlank(message="数据集描述为null")privateStringdescription;}说明:message字段不满足校Controller层的方法@PostMappingpublicResponseVOcreateDataSet(@Valid@RequestBodyDataSetSaveVOdataSetVO){returnResponseUtil.success(dataSetService.saveDataSet(dataSetVO));}说明:在验证实体DataSetSaveVO旁边添加@Valid或@Validated注解使用commons-lang3引入依赖org.apache.commonscommons-lang33.4常用方法说明测试代码//StringUtils.isEmptySystem.out.println(StringUtils.isEmpty(""));//trueSystem.out.println(StringUtils.isEmpty(""));//false//StringUtils.isNotEmptySystem.out.println(StringUtils.isNotEmpty(""));//假//StringUtils.isBlankSystem.out.println(StringUtils.isBlank(""));//trueSystem.out.println(StringUtils.isBlank(""));//true//StringUtils.isNotBlankSystem.out.println(StringUtils.isNotBlank(""));//falseListemptyList=newArrayList<>();ListnullList=null;ListnotEmptyList=newArrayList<>();notEmptyList.add(1);//CollectionUtils.isEmptySystem.out.println(CollectionUtils.isEmpty(emptyList));//trueSystem.out.println(CollectionUtils.isEmpty(nullList));//trueSystem.out.println(CollectionUtils.isEmpty(notEmptyList));//假//CollectionUtils.isNotEmptySystem.out.println(CollectionUtils.isNotEmpty(emptyList));//falseSystem.out.println(CollectionUtils.isNotEmpty(nullList));//falseSystem.out.println(CollectionUtils.isNotEmpty(notEmptyList));//true自定义注解当以上几个方面不能满足验证需求时,可以考虑使用自定义注解近期热点文章推荐:1.1,000+Java面试题及答案(2021最新版)2.别在满屏的if/else中,试试策略模式,真的很好吃!!3.操!Java中xx≠null的新语法是什么?4、SpringBoot2.5发布,深色模式太炸了!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!