前言

在开发接口的时候,参数校验是必不可少的。参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定。如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常。

上一篇文章讲了多种接受参数的方法【快学springboot】3.多种接受参数的方式。因为目前json类型的参数是最常用的,所以这里只讲解json类型的参数校验。其他类型的大同小异。

新建一个Param.java

public class Param {

 private String username;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}

目前这个类只有一个username属性。

使用Validated注解开启参数校验

@PostMapping(value = "/validate/notblank")
public Object validateNotBlank(@RequestBody @Validated Param param) {
return param;
}

NotBlank 非空判断

修改Param.java,在username属性上添加NotBlank注解

@NotBlank
private String username;

测试

通过控制台,我们可以看到抛出了一个MethodArgumentNotValidException异常,上面的返回结果其实是springboot默认的异常捕获器返回的。为了统一接口的数据返回格式,我们也需要自定义一个全局异常拦截器,这个将会在下一讲中讲解。

我们还可以通过NotBlank注解的message属性设置异常信息:

@NotBlank(message = "username不可为空")
private String username;

Length字符串长度判断

还是那个Param.java,我们给username加上Length注解,如下:

@Length(min = 2,max = 3)
@NotBlank(message = "username不可为空")
private String username;

同样,我们也可以使用message属性来设置返回错误信息。这里就不演示了。

NotNull 限制属性不可谓null

虽然前面有NotBlank注解了,但是一些Integer,Long等包装类型,还是需要用到NotNull注解来判断。

范围判断Min和Max

在Param.java上新增一个age属性,并且使用Min和Max注解限定大小

@Min(1)
@Max(100)
private Integer age;

这样写的问题是,如果age为空,则不会校验。如下:

所以我们还需要加上NotNull注解

@Min(1)
@Max(100)
@NotNull
private Integer age;

也可使用@Range注解来限定范围

@Range(min = 1, max = 100)

Email 注解校验邮件

@Email
private String email;

Pattern 注解校验正则表达式

@Pattern(regexp = "\d{4}-\d{2}-\d{2}")
private String birthday;

总结

以上总结了部分常用的参数校验的方法,当然还有很详细的一些没有列举处理,有需要的,可以自行搜索使用方式即可。参数校验,往往需要和全局的异常拦截器来配套使用,使得返回的数据结构永远是保持一致的,这样才能方便客户端解释。

下一节会对统一返回格式和全局异常拦截器做一个讲解。

【快学springboot】4.接口参数校验的更多相关文章

  1. springboot 接口参数校验

    前言 在开发接口的时候,参数校验是必不可少的.参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定.如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常. 上一篇文 ...

  2. SpringBoot实现通用的接口参数校验

    本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在实体类上添加注解,但对于不同的方法,所应用的校验规则也是不一样的,例 ...

  3. 【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案

    前言 之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的. ...

  4. 【快学springboot】12.实现拦截器

    前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...

  5. Spring Boot 之:接口参数校验

    Spring Boot 之:接口参数校验,学习资料 网址 SpringBoot(八) JSR-303 数据验证(写的比较好) https://qq343509740.gitee.io/2018/07/ ...

  6. Spring Boot实现通用的接口参数校验

    Spring Boot实现通用的接口参数校验 Harries Blog™ 2018-05-10 2418 阅读 http ACE Spring App API https AOP apache IDE ...

  7. 【快学springboot】8.JPA乐观锁OptimisticLocking

    介绍 当涉及到企业应用程序时,正确地管理对数据库的并发访问是至关重要的.为此,我们可以使用Java Persistence API提供的乐观锁定机制.它导致在同一时间对同一数据进行多次更新不会相互干扰 ...

  8. 测试开发专题:如何在spring-boot中进行参数校验

    上文我们讨论了spring-boot如何去获取前端传递过来的参数,那传递过来总不能直接使用,需要对这些参数进行校验,符合程序的要求才会进行下一步的处理,所以本篇文章我们主要讨论spring-boot中 ...

  9. SpringBoot 如何进行参数校验,老鸟们都这么玩的!

    大家好,我是飘渺. 前几天写了一篇 SpringBoot如何统一后端返回格式?老鸟们都是这样玩的! 阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数 ...

随机推荐

  1. Java web 会话技术 cookie与session

    一.会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题 每个用户在使用浏览器与服务器进行会话的过程 ...

  2. drat笔记

    安装dart https://www.dartcn.com/install http://www.cndartlang.com/920.html 所有执行的方法都在main里面. main() {} ...

  3. Vue项目中sass语法该怎么用?

    最近开始着手Vue框架,被各种报错蹂躏,其中有一个就是sass语法,<style>标签中添加<style lang="scss">,发现报错,在网上找了一些 ...

  4. VS2017控制台应用中通过代码连接MySQL数据库

    一,右键单击项目名称,选择属性 二,项目名->属性->c/c+±>常规->附加包含目录 添加路径:C:\Program Files\MySQL\MySQL Server 8.0 ...

  5. idea如何提取变量(拆分变量赋值和声明)

    需求描述: 我们时常遇到某个在某个局部作用域声明的变量,想要用在另一个地方,此时就需要在作用域外部声明变量,在作用域中给变量赋值. 在eclipse中这个功能和提取变量在一起,我们可以方便的拆分变量的 ...

  6. Python爬虫学习教程:天猫商品数据爬虫

    天猫商品数据爬虫使用教程 下载chrome浏览器 查看chrome浏览器的版本号,下载对应版本号的chromedriver驱动 pip安装下列包 pip install selenium pip in ...

  7. 绕过QQ群文件下载限速

    绕过QQ群文件下载限速 引言 众所周知,用QQ客户端下载QQ群文件,速度往往被限为10KB/s.这里我们来讲讲如何绕过这一限制. 原始事件发生在2020年2月2日,值武汉疫情爆发,全国各省市纷纷下令推 ...

  8. 802.11r mixed mode

    * 802.11r mixed mode support – Untill this code(8.0), if you enable 802.11r fast secure roaming, onl ...

  9. Cisco AP-ROMMON升级AP镜像

    Rommon is Cisco bootloader for their Router devices >>>ROMMON是思科设备的引导加载程序while U-boot is a ...

  10. DHCP报文交互流程

    1.发现阶段,即DHCP客户机寻找DHCP服务器的阶段(DHCPdiscover) DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCPdiscover发现信息来 ...