在上一篇博客《java开发工具(5)你的代码规范么?快用阿里规约插件扫描下吧》.中,我讲了怎么校验你的代码规范,在代码规范中就有一条是,必须对入参进行校验,也许你平时也会对入参进行校验,你校验的方式可能是这样的:
if (id == null) {
throw new BizException(BizErrorInfoEnum.DATA_NOT_EXIST,
BizErrorInfoEnum.DATA_NOT_EXIST.getMessage() + ":id");
}
这样的校验方式也是可行的,起码符合代码规约。
但是这样的校验方式并不优雅,在springBoot中自带了校验参数的组件Bean Validation
只要类的前面有@Valid注解,你可以通过如下方式进行代码校验
@NotNull(message="id不能为空")
private Long id;
但是仅仅如此,你还不算学会了Bean Validation,我希望通过我的这篇博客,你能掌握入参校验的原理以及各种类型的入参该如何进行校验。
一、SpringBoot如何通过一个注解校验
1.依赖
在spring-boot-starter-web包中,依赖了pom文件hibernate-validator包,hibernate-validator又依赖了包validation-api,这个两个包里面就包含了入参校验的各种注解。
2、使用
@GetMapping
public Integer getOperationBillsByCustomerId(@Valid query Query)
在方法的入参中加上@Valid注解,并在类中属性加上需要校验的注解即可:
@NotNull(message = "id不能为空")
private Long id;
二、都有哪些验证
验证的各种类,类似@NotNull这样的注解,有好几十种,就算我在这里列举出来了,你也未必记得住,而我更希望通过我的这篇文章能让你自由的使用各种验证类注解。
在Idea的右侧,有一个Bean Validation的按钮,如下图:
上图中我划分两个区域
- Bean Validation按钮:1处点击这个按钮打开所有的Bean Validation的注解
- 2处:上面就有各种校验的注解了,你可以随意使用
三、分组校验
你可能会遇到这种情况,保存和修改使用的是同一个类,修改需要验证id必须存在,而保存不需要验证id,但是如果我使用注解的话,岂不是都要验证id了,无法满足业务需求,此时Bean Validation提供了一个功能,分组
你只要按照如下方式使用即可:
@NotNull(message = "机构id不能为空",groups = {Group1.class,Group2.class})
@ApiModelProperty(value = "机构id",required = true)
private Long id;
@GetMapping
public Boolean getUser(@Validated(Group1.class) User user) {
这样就可以根据分组,决定是否做参数校验了。
四、总结
Bean Validation可以让你从繁琐的代码中解救出来,不必写繁琐的验证代码,通过一个注解就可以全全搞定。在本篇博客中,我介绍了
- Bean Validation的使用方式
- 各种注解的查看方式
- 分组功能的使用
快来解放你的代码,把Bean Validation用起来把