浅析SpringBoot的API参数校验

目录

1 前言

2 使用步骤

2.1 pom.xml中引入依赖

2.2 在参数前添加@Pattern注解

2.3 在类上添加@Validated注解

2.4 编写异常处理器


1 前言

在我们编写后端项目的时候,常常需要对前端传送的数据进行校验。当然,我们可以使用if-else来进行校验,不过这样会使得我们的代码相当繁琐,因此我们需要引入Spring Validation,来帮我们简化操作、提升效率。

此文章只为提供一种校验思路并介绍大致步骤,若想深入了解Spring Validation可参考其它文章/视频。

2 使用步骤

2.1 pom.xml中引入依赖


       org.springframework.boot
       spring-boot-starter-validation

2.2 在参数前添加@Pattern注解

举个例子,比如我们要写一个用户注册的方法,用户名和密码的长度要控制在[3, 10]之间,则有如下代码:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public Result register(@Pattern(regexp = "^\\S{3,10}$") String username, @Pattern(regexp = "^\\S{3,10}$") String password) {
        //注意3,10这里,10之前不能打空格,比如:3, 10就会报错
        //其它代码
    }
}

解释一下@Pattern(regexp = "^\\S{3,10}$"的含义:

  1. @Pattern: 这是Java的注解之一,通常用于对字符串的格式进行验证。它配合regexp参数来指定一个正则表达式,用于检查被注解的字符串参数是否符合某种模式。

  2. regexp = "^\\S{3,10}$": 这是@Pattern注解中的regexp参数,表示要匹配的正则表达式。现在让我们分解这个正则表达式:

    • ^: 表示匹配字符串的开始。
    • \\S: 表示匹配任意非空白字符。
    • {3,10}: 表示前面的字符(即非空白字符)的数量应该在3到10之间。
    • $: 表示匹配字符串的结束。

    综合起来,这个正则表达式的意思是匹配一个长度在3到10之间的、由非空白字符组成的字符串。

2.3 在类上添加@Validated注解

@RestController
@RequestMapping("/user")
@Validated
public class UserController {
    @Autowired
    private UserService userService;

    @PostMapping("/register")
    public Result register(@Pattern(regexp = "^\\S{3,10}$") String username, @Pattern(regexp = "^\\S{3,10}$") String password) {
        //注意3,10这里,10之前不能打空格,比如:3, 10就会报错
        //其它代码
    }
}

到此,还没有大功告成,用Postman进行测试,会发现得到一个500的报错,如下图,这并不是我们想要的,因此我们还需要配置一个异常处理器,来返回我们想要的数据类型。

浅析SpringBoot的API参数校验_第1张图片

2.4 编写异常处理器

//告诉SpringBoot这个类是用于处理异常的
@RestControllerAdvice
public class GlobalExceptionHandler {
    //指定错误类型,这里是所有的异常
    @ExceptionHandler(Exception.class)
    //Result即我们想要返回的数据类型
    public Result handleException(Exception e) {
        //因为有部分异常没有封装信息,所有借助StringUtils.hasLength来进行判断
        return Result.error(StringUtils.hasLength(e.getMessage()) ? e.getMessage() : "未知错误");
    }
}

 我们再来进行测试,如下图,可以看到,我们得到了想要的结果。

浅析SpringBoot的API参数校验_第2张图片

到此,Spring Validation参数检验的大致方法和步骤已经介绍完毕。

你可能感兴趣的:(SpringBoot,spring,boot,后端,java)