浅析SpringBoot的API参数校验

这篇具有很好参考价值的文章主要介绍了浅析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中引入依赖

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

浅析SpringBoot的API参数校验,SpringBoot,spring boot,后端,java

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参数校验,SpringBoot,spring boot,后端,java

到此,Spring Validation参数检验的大致方法和步骤已经介绍完毕。文章来源地址https://www.toymoban.com/news/detail-823706.html

到了这里,关于浅析SpringBoot的API参数校验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring boot实现实体类参数自定义校验

    安装依赖项 1、新建实体类 2、新建验证类 3、在控制器中 3.1 首先写入方法 @InitBinder注解的作用是在控制器方法执行之前,先执行有 @InitBinder注解的方法,使用WebDataBinder 把新建的验证规则绑定 3.2 在控制器接口参数中

    2024年02月12日
    浏览(38)
  • spring-boot 请求参数校验:注解 @Validated 的使用、手动校验、自定义校验

    spring-boot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理。 spring-boot已经引入了基础包,所以直接使用就可以。 在属性上添加校验注解: 在Controller上添加 @Validated 注解 校验未通过时,可能看到: 在 @Validated 后面紧跟着追加BindingResult,

    2023年04月16日
    浏览(106)
  • 如何在Spring Boot中优雅地进行参数校验

    在平时的开发工作中,我们通常需要对接口进行参数格式验证。当参数个数较少(个数小于3)时,可以使用 if ... else ... 手动进行参数验证。当参数个数大于3个时,使用 if ... else ... 进行参数验证就会让代码显得臃肿,这个时候推荐使用注解来进行参数验证。 在Java中,注解

    2024年01月17日
    浏览(44)
  • 参数校验: spring-boot-starter-validation

    2024年01月21日
    浏览(52)
  • Spring Boot使用 Hibernate-Validator校验参数时的长度校验

    今天在使用Validator框架数据验证的时候碰到了三个类似的注解,都是用来限制长度,但是用法上有区别:  @Size是一个Bean验证注释,用于验证关联的String具有的长度受最小值和最大值限制的值.  @Length是一个Hibernate特定的注释,与@Size具有相同的含义; 两者的区别: ​ 用@length限

    2024年02月14日
    浏览(41)
  • Spring Boot中使用JSR-303实现请求参数校验

    JSR-303是Java中的一个规范,用于实现请求参数校验。它定义了一组注解,可以应用于JavaBean的字段上,用于验证输入参数的合法性。下面是一些常用的JSR-303注解及其介绍: @NotNull :用于验证字段值不能为null。 @NotEmpty :用于验证字符串字段不能为空。 @NotBlank :用于验证字符

    2024年02月08日
    浏览(39)
  • Springboot开发时,对前端的请求参数,后端用于接受的实体类有没有必要校验为null?

    分析过程:         首先==null对于引用类型是判断这个对象有没有被加载到内存当中。对象的产生是由声明、是实列化、初始化三个过程.         初始化: RequestzbszAdd requestzbszAdd; 也就是声明一个变量         实列化:使用new         初始化:new  RequestzbszAdd()

    2024年02月09日
    浏览(44)
  • 【Spring Boot】请求参数传json数组,后端采用(pojo)新增案例(103)

    请求参数传json数组,后端采用(pojo)接收的前提条件: 1.pom.xml文件加入坐标依赖:jackson-databind 2.Spring Boot 的启动类加注解:@EnableWebMvc 3.Spring Boot 的Controller接受参数采用:@RequestBody 4.postman入参采用json格式 备注: 此处省略:pom文件加入坐标依赖和启动类加注解:@EnableWebM

    2024年02月14日
    浏览(39)
  • 【Spring Boot】请求参数传json对象,后端采用(pojo)CRUD案例(102)

    请求参数传json对象,后端采用(pojo)接收的前提条件: 1.pom.xml文件加入坐标依赖:jackson-databind 2.Spring Boot 的启动类加注解:@EnableWebMvc 3.Spring Boot 的Controller接受参数采用:@RequestBody 4.postman入参采用json格式 1.pom.xml文件加入坐标: 2.Spring Boot 启动类:加注解:@EnableWebMvc POJO类

    2024年02月14日
    浏览(42)
  • Springboot实现优雅的参数校验(Spring Validation)和 if else说再见

    当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是 必不可少 的活。比如下图就是 我们一个项目里 新增一个菜单校验 参数的函数,写了一大堆的 if else 进行校验,非常的不优雅,比起枯燥的CRUD来说,参数校验更是枯燥。这只是一个创建菜单的

    2023年04月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包