SpringBoot Service层使用Validated注解做接口参数校验

背景

使用注解参数校验,可避免业务代码中无休止的参数校验判断,在分层的方面来说,参数校验都是在Controller层完成的,那么Spring MVC中,可直接添加Validate相关的参数校验注解,即可快速完成而无需其它额外的配置,但是如果想在Service层的接口中添加参数校验,则需要额外的配置,否则,注解添加后是无效的。

实现

我们了解到参数校验是基于Validator来做的,首先需要添加hibernate-validator和validation-api依赖,由于spring-boot-starter-web依赖hibernate-validator,而hibernate-validate又依赖validation-api,所以项目中只需要添加spring-boot-starter-web依赖即可,如下:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<version>2.1.1.RELEASE</version>
</dependency>

此时,需要在切面中通过Validator完成接口调用时的参数校验,实现如下:

@Aspect
@Component
public class ParamsCheckAspect {
    
    private static Validator validator;
    static {
        validator = Validation
Spring Boot项目中,可通过以下方式使用注解进行参数校验: 1. **了解背景与必要性**:在实际应用里,标准的注解校验可能无法满足所有需求,像处理特殊校验场景时,可能需根据业务逻辑对字段复杂的组合校验,或在运行时动态决定校验规则,此时自定义校验注解能实现更灵活和精确的校验逻辑,还可提高代码的可读性和可维护性,让应用更好地应对复杂业务需求。并且在Spring Boot的REST接口项目中,接收参数数据时对传入的参数简单验证,若参数属性值多,用if - else判断会啰嗦且不易读,所以可采用Java Bean的校验机制 [^1][^2]。 2. **了解相关规范和依赖**:开始Bean的校验前,要了解JSR 303规范和Hibernate Validator 。若Spring Boot版本(如2.3.4.RELEASE)无法使用@NotNull等注解,可能需手动导入依赖 [^2][^4]。 ```xml <!--@Validated参数校验 START--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.4.1.Final</version> </dependency> <dependency> <groupId>org.jboss.logging</groupId> <artifactId>jboss-logging</artifactId> <version>3.3.0.Final</version> </dependency> <dependency> <groupId>com.fasterxml</groupId> <artifactId>classmate</artifactId> <version>1.3.3</version> </dependency> <!--@Validated参数校验 END--> ``` 3. **启用校验功能**:在接口参数对象添加`@Valid`注解,启用校验功能,否则校验会失效。示例代码如下: ```java public R<Boolean> saveModel(@Valid @RequestBody Model model){ return R.ok(modelService.saveModel(model)); } ```
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值