在开发接口的时候,参数校验是必不可少的。参数的类型,长度等规则,在开发初期都应该由产品经理或者技术负责人等来约定。如果不对入参做校验,很有可能会因为一些不合法的参数而导致系统出现异常。
上一篇文章讲了多种接受参数的方法 【快学springboot】3.多种接受参数的方式 。因为目前json类型的参数是最常用的,所以这里只讲解json类型的参数校验。其他类型的大同小异。
public class Param { private String username; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } 复制代码
目前这个类只有一个username属性。
@PostMapping(value = "/validate/notblank") public Object validateNotBlank(@RequestBody @Validated Param param) { return param; } 复制代码
修改Param.java,在username属性上添加NotBlank注解
@NotBlank private String username; 复制代码
测试
通过控制台,我们可以看到抛出了一个MethodArgumentNotValidException异常,上面的返回结果其实是springboot默认的异常捕获器返回的。 为了统一接口的数据返回格式,我们也需要自定义一个全局异常拦截器 ,这个将会在下一讲中讲解。
我们还可以通过NotBlank注解的message属性设置异常信息:
@NotBlank(message = "username不可为空") private String username; 复制代码
还是那个Param.java,我们给username加上Length注解,如下:
@Length(min = 2,max = 3) @NotBlank(message = "username不可为空") private String username; 复制代码
同样,我们也可以使用message属性来设置返回错误信息。这里就不演示了。
虽然前面有NotBlank注解了,但是一些Integer,Long等包装类型,还是需要用到NotNull注解来判断。
在Param.java上新增一个age属性,并且使用Min和Max注解限定大小
@Min(1) @Max(100) private Integer age; 复制代码
所以我们还需要加上NotNull注解
@Min(1) @Max(100) @NotNull private Integer age; 复制代码
@Range(min = 1, max = 100) 复制代码
@Email private String email; 复制代码
@Pattern(regexp = "/d{4}-/d{2}-/d{2}") private String birthday; 复制代码