欢迎访问宙启技术站
智能推送

SpringBoot如何优雅的进行参数校验

发布时间:2023-05-15 00:35:21

在Web开发中,参数校验是非常关键的一步,在SpringBoot中我们可以使用JSR-303规范进行参数校验,这种方式非常简单,代码量也比较小,但是不够优雅,会让代码变得不够简洁。在这篇文章中,我将会介绍一个优雅的参数校验方法。

在SpringBoot2.3版本之后,引入了Validation Starter依赖,我们可以不依赖JSR-303规范进行参数校验,而使用Spring提供的@Validated注解和Validation框架进行参数校验。接下来,我会用一个例子来展示如何使用@Validated注解进行参数校验。

首先,在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

然后,在Controller上使用@Validated注解进行校验:

@RestController
@RequestMapping("/api")
@Validated
public class UserController {

    @PostMapping("/user")
    public User createUser(@RequestBody @Valid User user) {
        // 处理相关业务逻辑
        return user;
    }
}

在以上代码中,UserController使用了@Validated注解进行校验,同时在createUser方法的入参User对象上使用了@Valid注解进行校验。当实体类的属性不符合规则时,框架会抛出MethodArgumentNotValidException异常,我们可以在全局异常处理中捕获此异常并返回友好的提示信息给前端。

类似的,我们还可以在Service层、Repository层等地方进行参数校验,具体代码示例如下:

@Service
@Validated
public class UserService {

    // 校验手机号码格式是否正确
    public void checkMobileFormat(@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确") String mobile) {
        // 处理相关业务逻辑
    }
    
    // 校验用户信息
    public void checkUserInfo(@Valid User user) {
        // 处理相关业务逻辑
    }
}

在以上代码中,UserService中的checkMobileFormat方法和checkUserInfo方法均使用了@Validated注解进行校验,同时传入的参数也使用了@Pattern和@Valid注解。

总结而言,使用@Validated注解进行参数校验可以让代码更加简洁、优雅,同时也可以避免依赖过多的第三方库。相信在未来的开发中,@Validated注解会越来越受到开发者的关注和使用。