【快学springboot】4.接口参数校验
前言
在开发接口的时候,参数校验是必不可少的。参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定。如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常。
上一篇文章讲了多种接受参数的方法【快学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.接口参数校验的更多相关文章
- springboot 接口参数校验
前言 在开发接口的时候,参数校验是必不可少的.参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定.如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常. 上一篇文 ...
- SpringBoot实现通用的接口参数校验
本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义注解实现通用的接口参数校验. 缘由 目前参数校验常用的方法是在实体类上添加注解,但对于不同的方法,所应用的校验规则也是不一样的,例 ...
- 【快学SpringBoot】Spring Cache+Redis实现高可用缓存解决方案
前言 之前已经写过一篇文章介绍SpringBoot整合Spring Cache,SpringBoot默认使用的是ConcurrentMapCacheManager,在实际项目中,我们需要一个高可用的. ...
- 【快学springboot】12.实现拦截器
前言 之前在[快学springboot]6.WebMvcConfigurer配置静态资源和解决跨域里有用到WebMvcConfigurer接口来实现静态资源的映射和解决跨域请求,并且在文末还说了Web ...
- Spring Boot 之:接口参数校验
Spring Boot 之:接口参数校验,学习资料 网址 SpringBoot(八) JSR-303 数据验证(写的比较好) https://qq343509740.gitee.io/2018/07/ ...
- Spring Boot实现通用的接口参数校验
Spring Boot实现通用的接口参数校验 Harries Blog™ 2018-05-10 2418 阅读 http ACE Spring App API https AOP apache IDE ...
- 【快学springboot】8.JPA乐观锁OptimisticLocking
介绍 当涉及到企业应用程序时,正确地管理对数据库的并发访问是至关重要的.为此,我们可以使用Java Persistence API提供的乐观锁定机制.它导致在同一时间对同一数据进行多次更新不会相互干扰 ...
- 测试开发专题:如何在spring-boot中进行参数校验
上文我们讨论了spring-boot如何去获取前端传递过来的参数,那传递过来总不能直接使用,需要对这些参数进行校验,符合程序的要求才会进行下一步的处理,所以本篇文章我们主要讨论spring-boot中 ...
- SpringBoot 如何进行参数校验,老鸟们都这么玩的!
大家好,我是飘渺. 前几天写了一篇 SpringBoot如何统一后端返回格式?老鸟们都是这样玩的! 阅读效果还不错,而且被很多号主都转载过,今天我们继续第二篇,来聊聊在SprinBoot中如何集成参数 ...
随机推荐
- layui-表格宽度自适应
不设置表格宽度,表格默认全屏 可以通过以下方式设置表格宽度
- react组件之间传值方式
1.父向子(通过props传值) 2.父向更深层的子(通过context传值) 3.子向父(通过回调函数传值:在父组件中创建一个函数来接收子组件传过来的参数值,通过父组件将这个函数做为子组件的属性传递 ...
- $.isEmptyObject() 判断对象是否为空
$.isEmptyObject(obj):为空 返回true不为空 返回 false: isEmptyObject: function( obj ) { var name; for ( name in ...
- HDU5444 Elven Postman
按要求递归建树输出~ #include<cstdio> #include<algorithm> #include<cstring> using namespace ...
- 吴裕雄--天生自然Numpy库学习笔记:Numpy 数组操作
import numpy as np a = np.arange(8) print ('原始数组:') print (a) print ('\n') b = a.reshape(4,2) print ...
- AP2800无法放出SSID?
实际的无线网络中,有时候由于对无线设备的datasheet不是很了解,可能会以旧的知识去判断一些故障.在思科的较新的AP型号中:例如AP2800&AP3800等,有时候发现它们可正常的注册到W ...
- Java IO流详解(四)——字符流Reader和Writer
前面一章介绍了字节流的使用,提到了字节流在处理utf-8编码的中文可能会出现乱码的情况(其他编码的中文同样会出现乱码),所以Java针对这一情况提供了字符流. 但是字符流只能处理字符,不能用来处理 . ...
- Java语言特性、加载与执行
[开源.免费.纯面向对象.跨平台] 简单性: 相对而言,例如,Java是不支持多继承的,C++是支持多继承的,多继承比较复杂:C++ 有指针,Java屏蔽了指针的概念.所以相对来说Java是简单的. ...
- 【PAT甲级】1050 String Subtraction (20 分)
题意: 输入两个串,长度小于10000,输出第一个串去掉第二个串含有的字符的余串. trick: ascii码为0的是NULL,减去'0','a','A',均会导致可能减成负数. AAAAAccept ...
- 收藏---wordpress搭建出来的blog
http://blog.luofei.org/2012/02/painters-and-paintings-through-the-eyes-of-faith/