作者 | 何甜甜在吗

来源 | juejin.cn/post/6913735652806754311

前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层。到底应该如何做参数校验呢

Controller层 VS Service层

去网上查阅了一些资料,一般推荐与业务无关的放在Controller层中进行校验,而与业务有关的放在Service层中进行校验。

那么如何将参数校验写的优雅美观呢,如果都是if - else,就感觉代码写的很low,还好有轮子可以使用

如果您正在学习Spring Boot,推荐一个连载多年还在继续更新的免费教程:http://blog.didispace.com/spring-boot-learning-2x/

常用校验工具类

使用Hibernate Validate

引入依赖

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.3.1.Final</version>
</dependency>

常用注解说明

使用姿势

需要搭配在Controller中搭配@Validated或@Valid注解一起使用,@Validated和@Valid注解区别不是很大,一般情况下任选一个即可,区别如下:

虽然@Validated比@Valid更加强大,在@Valid之上提供了分组功能和验证排序功能,不过在实际项目中一直没有用到过

Hibernate-validate框架中的注解是需要加在实体中一起使用的

定义一个实体

public class DataSetSaveVO {//唯一标识符为空@NotBlank(message = "user uuid is empty")//用户名称只能是字母和数字@Pattern(regexp = "^[a-z0-9]+$", message = "user names can only be alphabetic and numeric")@Length(max = 48, message = "user uuid length over 48 byte")private String userUuid;//数据集名称只能是字母和数字@Pattern(regexp = "^[A-Za-z0-9]+$", message = "data set names can only be letters and Numbers")//文件名称过长@Length(max = 48, message = "file name too long")//文件名称为空@NotBlank(message = "file name is empty")private String name;//数据集描述最多为256字节@Length(max = 256, message = "data set description length over 256 byte")//数据集描述为空@NotBlank(message = "data set description is null")private String description;
}

说明:message字段为不符合校验规则时抛出的异常信息

Controller层中的方法

@PostMapping
public ResponseVO createDataSet(@Valid @RequestBody DataSetSaveVO dataSetVO) {return ResponseUtil.success(dataSetService.saveDataSet(dataSetVO));
}

说明:在校验的实体DataSetSaveVO旁边添加@Valid或@Validated注解

如果您正在学习Spring Cloud,推荐一个连载多年还在继续更新的免费教程:https://blog.didispace.com/spring-cloud-learning/

使用commons-lang3

引入依赖

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version>
</dependency>

常用方法说明

测试代码

//StringUtils.isEmpty
System.out.println(StringUtils.isEmpty(""));  //true
System.out.println(StringUtils.isEmpty("  "));  //false
//StringUtils.isNotEmpty
System.out.println(StringUtils.isNotEmpty(""));  //false//StringUtils.isBlank
System.out.println(StringUtils.isBlank(""));  //true
System.out.println(StringUtils.isBlank(" "));  //true
//StringUtils.isNotBlank
System.out.println(StringUtils.isNotBlank(" "));  //falseList<Integer> emptyList = new ArrayList<>();
List<Integer> nullList = null;
List<Integer> notEmptyList = new ArrayList<>();
notEmptyList.add(1);//CollectionUtils.isEmpty
System.out.println(CollectionUtils.isEmpty(emptyList));   //true
System.out.println(CollectionUtils.isEmpty(nullList));   //true
System.out.println(CollectionUtils.isEmpty(notEmptyList));   //false//CollectionUtils.isNotEmpty
System.out.println(CollectionUtils.isNotEmpty(emptyList));   //false
System.out.println(CollectionUtils.isNotEmpty(nullList));   //false
System.out.println(CollectionUtils.isNotEmpty(notEmptyList));   //true

自定义注解

当上面的方面都无法满足校验的需求以后,可以考虑使用自定义注解。

往期推荐

浪潮的加班标语炸了,这是顶风作案?网传:1月加班87小时还要扣工资?

如果MySQL的自增 ID 用完了,怎么办?

手磨14nm咖啡,传播性病给60%的实习团队!这样的简历,90%的公司抛出橄榄枝?

我精通各种技术体系,因已45岁求职难!

朝阳群众举报阿里996造成交通严重堵塞!网友:谁举报下我们啊...

技术交流群

最近有很多人问,有没有读者交流群,想知道怎么加入。加入方式很简单,有兴趣的同学,只需要点击下方卡片,回复“加群“,即可免费加入我们的高质量技术交流群!

点击阅读原文,送你免费Spring Boot教程!

Spring Boot 进行优雅的字段校验,写得太好了!相关推荐

  1. Spring Boot + Redis 实现各种操作,写得太好了吧!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/qq_42105629/article/details/102589319 一.Jedis,Red ...

  2. Spring Boot 如何优雅的校验参数?

    今天介绍一下 Spring Boot 如何优雅的整合JSR-303进行参数校验,说到参数校验可能都用过,但网上的教程大多是简单的介绍,所以我们今天详细看来一下 . 什么是 JSR-303? JSR-3 ...

  3. Spring Boot (16)---优雅的入门篇

    Spring Boot (16)---优雅的入门篇 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备. ...

  4. Spring Boot如何优雅的校验参数

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「乱敲代码」 做web开发有一点很烦人就 ...

  5. Springboot中优雅进行字段校验

    欢迎关注方志朋的博客,回复"666"获面试宝典 前段时间提交代码审核,同事提了一个代码规范缺陷:参数校验应该放在controller层.到底应该如何做参数校验呢? | Contro ...

  6. Spring Boot(Cloud) 优雅停机

    为了解决在微服务重启的过程中,可能出现一部分 http 请求处理失败的问题,提供一下方案 拟用方案: 第一步:重启前先从主动将服务剔除,并等待一段时间 第二步:停止服务并重启 一.主动将服务剔除 该方 ...

  7. 十、Spring boot 简单优雅的整合 Swagger2

    文章目录 前言 pom.xml SwaggerConfig 接口中的配置 番外 前言 swagger2 是什么,我这里就不说了,就是一个简单的接口文档,方便前后端联调. 其实之前没有想要到要使用swa ...

  8. Sprinig Boot + Redis 实现接口幂等性,写得太好了!

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 作者:wa ...

  9. 后端技术:Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!

    本篇和大家分享的是 Spring Boot 打包并结合 Shell 脚本命令部署,重点在分享一个shell 程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assemb ...

最新文章

  1. Maven学习——安装与修改Maven的本地仓库路径
  2. 2021物理大事汇:μ子磁性异常,时间晶体现身,天体物理大丰收
  3. php的pdo如何访问SQLserver_php使用pdo连接sqlserver示例分享
  4. java 线程停止在那个为止_java停止线程
  5. mongodb集群搭建
  6. Wireshark-001基本设置
  7. BN层对神经网络神经元数据分布的影响
  8. LabVIEW状态机小灯按顺序点亮条件结构+自定义枚举
  9. TCP/IP协议 TCP包深入理解
  10. Perl语言入门14-17
  11. 四款主流同步软件介绍
  12. Linux系统蓝牙WiFi抓包命令
  13. 办公技巧:分享100个Excel快捷键,值得收藏!
  14. 《2020职场绿茶图鉴》
  15. QuickCHM V2.6
  16. 项目二-成员函数、友元函数和一般函数之区别
  17. 2018 Arab Collegiate Programming Contest (ACPC 2018) L.Looking for Taste(按位或)
  18. 数字信号处理——FFT
  19. LC99 Recover Binary Search Tree
  20. 劲爆战士第二部的陀螺叫什么名字

热门文章

  1. 单元测试:使用mocha和should.js搭建nodejs的单元测试
  2. shell 脚本调试
  3. 在XML中发送二进制数据
  4. docker逃逸漏洞复现 cve-2019-5736
  5. javascript es6 特性简介
  6. mysql 一条sql update多条记录
  7. linux c http下载 带确认 进度条
  8. centos7 安装 redis
  9. linux c 打印错误信息error errno perror和strerror的区别
  10. 安装phpMyAdmin图文教程