浅析SpringBoot的API参数校验

本文介绍了如何在SpringBoot项目中使用SpringValidation进行参数校验,包括在pom.xml中引入依赖,使用@Pattern注解验证字符串格式,以及如何在类上添加@Validated和编写异常处理器处理错误情况。
摘要由CSDN通过智能技术生成

目录

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中引入依赖

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

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的报错,如下图,这并不是我们想要的,因此我们还需要配置一个异常处理器,来返回我们想要的数据类型。

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() : "未知错误");
    }
}

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

到此,Spring Validation参数检验的大致方法和步骤已经介绍完毕。如果想更深入的了解参数校验,可以看我的这篇文章《SpringBoot中的实体参数校验及分组校验​​​​​​​》。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

厂里英才

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值