首页 > 其他分享 >RUOYI参数验证异常处理及自定义注解触发验证抛出异常报错

RUOYI参数验证异常处理及自定义注解触发验证抛出异常报错

时间:2024-11-29 16:28:30浏览次数:10  
标签:自定义 验证 ruoyi value 报错 注解 import annotation

目录

一.ruoyi与参数验证

1.触发报错

在这里插入图片描述对参数验证的使用,从触发参数报错开始,首先对ruoyi人为触发一次报错,在前后端分离的ruoyi中触发的报错分析,需要从前端开始。

2.后端现象

在这里插入图片描述
通过图中报错信息我们可以知道

GlobalExceptionHandler捕获了异常。

在SysRoleController.edit处抛出的异常。

具体的异常是Field error in object ‘sysRole’ on field ‘roleName’: rejected value [1231231233211232231132221321331212312321312323121323123131212332121312321331231221323121331]。

二.源码分析

1.前端代码

在这里插入图片描述
在这里插入图片描述
前端对输入框做了限制,如果输入框为空,就用message来显示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击确认后通过updateRole 函数对URI 为/system/role 发起HTTP PUT 操作

在这里插入图片描述
从开发者工具中也可以看到请求的URL地址

在这里插入图片描述
在这里插入图片描述
后端返回信息后,前端的处理逻辑,返回code 为500 时,输出错误提示Message 框

2.后端代码

在这里插入图片描述
在这里插入图片描述

SysRole对roleName的限制如下图所示,如果输入框满足下面任意一个条件就会抛出异常
在这里插入图片描述

异常处理如下图所示
在这里插入图片描述

在这里插入图片描述

3.报错分析

1.修改前端角色名称长度超过30
2.点击确定与后台交互,请求URI:/system/role
3.后台检测到SysRole 的参数roleName 不符合要求,则抛出异常类型MethodArgumentNotValidException
4.异常被全局异常处理器捕获,返回message 给到前端,且错误码是500
5.前端路由截获错误码500 的信息,进行处理显示message 内容
在这里插入图片描述

三.自定义函数注解

在ruoyi-framework目录下的pom.xml中引入验证validation依赖

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

1.NoNumber注解

新增NoNumber注解,设置自定义校验器NoNumberMain.class

在ruoyi-common目录的下的annotation目录中创建NoNumber注解
在这里插入图片描述

package com.ruoyi.common.annotation;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR,ElementType.PARAMETER})
@Constraint(validatedBy = {NoNumberMain.class})
public @interface NoNumber {
    String message()
            default "输入的内容中不允许存在数字";

   Class<?>[] groups() default {};
   Class<? extends Payload>[] payload() default {};
}

2.NoNumberMain校验器

自定义NoNumber校验器,实现ConstraintValidator接口

在ruoyi-common目录的下的annotation目录中创建NoNumberMain
在这里插入图片描述

package com.ruoyi.common.annotation;

import com.ruoyi.common.utils.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class NoNumberMain implements ConstraintValidator<NoNumber, String> {
    private final String PATTERN = "^[0-9]*$";
    
    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        if (StringUtils.isBlank(value)) {
            return false;
        }
        return !containNumber(value);
    }

    public boolean containNumber(String value) {
        if (value == null) {
            return false;
        }
        return value.matches(PATTERN);
    }
}

3.将注解添加进SysRole中

在这里插入图片描述

4.前端&后端现象

在这里插入图片描述

在这里插入图片描述

标签:自定义,验证,ruoyi,value,报错,注解,import,annotation
From: https://blog.csdn.net/HUMGAMING/article/details/144134454

相关文章

  • 自定义一个WinForm个性化的TabControl
    系列文章目录第一章自定义一个WinForm异形按钮第二章自定义一个WinForm圆角文本框第三章自定义一个WinForm个性化的TabControl文章目录系列文章目录前言一、效果展示自定义TabControl效果展示二、TabControl自定义1.创建一个MyTabControl2.自定义并暴露出一些常......
  • 滑动验证码之鼠标移动轨迹绘制分析
    Part1鼠标事件类型这些是JavaScript中与鼠标事件相关的常见事件类型。具体介绍如下:auxclick:表示鼠标的辅助按键被点击。辅助按键包括鼠标中键和右键。click:表示鼠标单击操作被触发。dblclick:表示鼠标双击操作被触发。mousedown:表示鼠标按下操作被触发。mouseup:表示鼠标......
  • 客户端WinForm实现Form表单格式自定义
    usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.ComponentModel.Design;usingSystem.ComponentModel.Design.Serialization;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;using......
  • 【验证码逆向专栏】某里 v2 滑动验证码分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 【验证码逆向专栏】某多多验证码逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • MATLAB实现K折交叉验证GRNN广义回归神经网络多输入单输出回归预测
    目录MATLAB实现K折交叉验证GTNN广义回归神经网络多输入单输出回归预测...1项目背景介绍...1项目目标与意义...2项目挑战...2项目特点与创新...2项目应用领域...3项目效果预测图程序设计...3项目模型架构...4项目模型描述...4项目模型算法流程图...6项目结......
  • 服务器无法连接远程桌面,报错如下:由于没有远程桌面授权服务器可以提供许可证,远程会话被
    转载于知乎——等雪的鱼一、问题:经常会遇到,server20022、server2016、server2012、server2008操作系统,安装远程桌面服务之后没有激活,经过120天到期之后,没办法再使用,重新安装激活远程桌面服务也不能用。 二、具体的报错如下图:我的环境是云平台,通过vnc网页远程登录。也可通......
  • docker-compose 报错 container.image_config['ContainerConfig'].get('Volumes') or
    应该使用dockercompose而不是docker-compose(废弃的1.0版本)env:WSLUbuntu-22.04报错关键字如下File"/usr/lib/python3/dist-packages/compose/service.py",line1579,inget_container_data_volumescontainer.image_config['ContainerConfig'].get('......
  • element动态表单验证一
       <template><el-form:model="dynamicValidateForm"ref="dynamicValidateForm"label-width="100px"class="demo-dynamicbg-whitepg-20"style="width:30%;"><el-form-item>&......
  • 【稳定性】上线三板斧(可灰度、可验证、可回滚)
    作者:京东物流冯志文背景从研发的流程阶段来看,在确定产品需求后,我们会经历架构设计、编码、测试、联调验证和上线这几个阶段来交付系统。在这个过程中,我们需要特别关注上线环节,因为它是事故高发的阶段。为了应对这种情况,我们实施了严格的发布标准操作程序,简称为“发布三板斧”......