springboot validator使用

背景

通常项目接口存在大量的校验逻辑,校验传入的请求的参数的合法性。这些校验逻辑,不使用框架提供的validator的话,会让校验代码大批的混在业务逻辑处理代码中,而springboot本身就是有提供校验功能的,我们可以考虑使用它,将校验逻辑从业务代码中抽出来,使业务逻辑处理代码更清晰简单,专注于处理业务功能,系统的代码会更优雅和干净。

使用方法介绍

1、pom文件中增加相应的依赖:


<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>

2、 在需校验的controller接口方法的参数中,增加 @Validated(可以选配校验规则组), 增加参数BindingResult bindingResult 在方法中增加bindingResult.hasErrors()判断并处理。或者统一由拦截器拦截处理。

3、在controller接收参数中,配置校验规则注解,例如:

@NotNull(message="id不能为空",groups{UpdateGroup.class})
private Long id;
@NotNull(message="名字不能为空",groups={AddGroup.class})
@Length(min=3,max=45,
message="名字长度必须在3到45之间",
groups={AddGroup.class,UpdateGroup.class})
private String name;

在需要嵌套校验的地方,可以用@Valid声明嵌套校验

问题与建议

不使用框架统一校验,容易出现接口没有校验参数的情况,导致过于依赖前端校验,万一有人绕过前端直接请求,系统可能会有未知风险。建议不管前端有没有校验,后端都要校验,并校验的方式不要直接写在业务逻辑代码中,这样会让业务逻辑代码不干净,显得臃肿,建议用框架提供的校验器提供统一的校验。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容