通过分析RuoYi参数验证学习自定义[参数验证的]注解

目录

1.分析RuoYi参数验证

1.1 触发验证抛出异常

1.1.1触发方式

1.1.2 前端现象

1.1.3 后端现象

1.2 源码分析

1.2.1前端代码

1.2.2后端代码

 1.3 小结

2.学习自定义[参数验证的]注解

2.1 注入依赖

2.2 controller层(定义控制器)

2.2自定义注解 

2.3 在实体类中需要抛出异常信息的属性上添加注解

2.4自定义注解和参数校验器

2.4.1自定义注解

2.4.2自定义参数校验器 

2.4 Postman的响应结果

2.4.1自定义的展示

2.4.2jakarta.validation.constraints展示


1.分析RuoYi参数验证

参数验证:有助于确保应用程序接收到的输入是合法且符合预期的,保证应用程序质量和安全性的关键步骤,它有助于捕获和处理潜在问题,提高系统的可靠性和稳定性。

1.1 触发验证抛出异常

1.1.1触发方式

输入过长的部门名称

1.1.2 前端现象

有提示框显示,部门名称长度不能超过30 个字符

1.1.3 后端现象

在log中查看发现,从中我们可以得出:

1.WARN 关键字:有捕获异常Exception

2.ExceptionHandlerExceptionResolver捕获了异常

3.从com.ruoyi.web.controller.system.SysDeptController.add(com.ruoyi.common.core.domain.

entity.SysDept)抛出的异常

4.具体抛出的异常:Field error in object 'sysDept' on field 'deptName': rejected value [1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111]

5.抛出的异常类型:MethodArgumentNotValidException

1.2 源码分析

1.2.1前端代码

从浏览器开发者工具可以看到,整体的HTTP 请求URL 为

http://localhost:81/dev-api/system/dept

在预览中,我们可以看到后端返回信息后,前端的处理逻辑,返回code 为500 时,输出错误提示Message 框

 

1.2.2后端代码

接下来就是看后端代码,首先我们找到后端/system/dept的路径

 SysDept 类对属性roleName 的限制如下

当deptName 不满足两个注解限制时,会抛出异常

 1.3 小结

添加部门报错,分析逻辑总结:

1.修改前端角色名称长度超过30,如11111111111111111111111111111111111111

2.点击确定与后台交互,请求URI:/system/dept

3.后台检测到SysDept 的参数deptName 不符合要求,则抛出异常类型MethodArgumentNotValidException

4.异常被全局异常处理器捕获,返回message 给到前端,且错误码是500

5.前端路由截获错误码500 的信息,进行处理显示message 内容

2.学习自定义[参数验证的]注解

通过分析RuoYi的代码,已经对自定义[参数验证的]注解有了一定的了解,下面展示的是:参考官方文档,自定义[参数验证的]注解,触发验证抛出异常报错的学习。

2.1 注入依赖

2.2 controller层(定义控制器)

在 addUser 方法的参数列表中使用 @Valid 注解进行参数校验,@RequestBody 注解用于将请求体中的 JSON 对象自动映射为 Java 对象。

因为本文主要讲的是自定义[参数验证的]注解,剩下的SMD层就不过多的赘述。

2.2自定义注解 

2.3 在实体类中需要抛出异常信息的属性上添加注解

在这里@NotEmpty是自定义的注解,@NotNull和@Postive为jakarta.validation依赖所带的。这里我想都尝试两种方式。

在 User 类的属性上使用校验注解,message 属性用于指定校验失败时的错误提示信息。 

2.4自定义注解和参数校验器

2.4.1自定义注解

  1. @Documented: 该注解表示这个注解应该被包含在 JavaDoc 中。

  2. @Constraint(validatedBy = { NotEmpty.NotEmptyValidator.class }): 这个注解指定了用于验证的验证器类,即 NotEmptyValidator

  3. @Target({ ElementType.FIELD }): 这个注解表示 @NotEmpty 只能应用于类的字段。

  4. @Retention(RetentionPolicy.RUNTIME): 这个注解表示 @NotEmpty 注解在运行时保留。

  5. @NotNull@NotBlank: 这两个注解是 Bean Validation 提供的标准注解,用于验证字段非空。@NotNull 用于确保字段不为 null,而 @NotBlank 则用于确保字符串字段不为空(不包含空格)。

  6. @ReportAsSingleViolation: 这个注解表示当有多个验证约束时,只报告一个违规,而不是每个约束都报告。

2.4.2自定义参数校验器 

因为我定义的内容比较简单,所以将自定义参数校验器也写进了注解里。

自定义注解的验证逻辑相对简单且专用时。通过将验证逻辑写在注解内部,可以更方便地组织和管理相关的代码,并减少在项目中创建大量的小型验证器类。此外,将验证逻辑嵌套在注解内也使得这些逻辑更容易理解和维护。

2.4 Postman的响应结果

2.4.1自定义的展示

2.4.2jakarta.validation.constraints展示


 

猜你喜欢

转载自blog.csdn.net/weixin_64890968/article/details/134571782
今日推荐