首页 > 其他分享 >非Controller控制层参数校验怎么办

非Controller控制层参数校验怎么办

时间:2024-07-17 11:28:04浏览次数:11  
标签:Spring 校验 System Controller Validator 参数 println out

  1. 参数校验背景

    • 通常在Spring Boot中,参数校验是在Controller控制层完成的。
    • 文章探讨了在非Controller控制层进行参数校验的方法。
  2. Validator接口

    • Spring提供了JSR-303的一个变种@Validated
    • Validator接口定义了用于执行验证的方法,主要方法包括:
      • validate(T object, Class<?>... groups):验证对象是否符合约束条件。
      • validateProperty(T object, String propertyName, Class<?>... groups):验证对象的特定属性是否符合约束条件。
      • validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups):验证给定属性值是否符合约束条件,无需创建对象实例。
  3. Validator接口的使用

    • 依赖Spring容器
      • 通过Spring容器注入Validator接口的实现类。
      • 示例代码展示了如何在Spring Boot中使用Validator进行参数校验。
    • 不依赖Spring容器
      • JSR 303是一种规范,不依赖Spring容器,可以在任何Java项目中使用。
      • 通过ValidatorFactory获取Validator接口的实现。
      • 示例代码展示了如何在非Spring项目中使用Validator进行参数校验。
  4. 示例代码

    • UserBean类
      @Data
      public class UserBean {
          @NotBlank
          private String username;
      
          @Min(value = 18)
          private Integer age;
      }
      
    • Spring Boot中的Validator使用
      @SpringBootTest
      class SpringbootPracticeApplicationTests {
          @Resource
          private Validator validator;
      
          @Test
          public void testValidator(){
              UserBean userBean = new UserBean();
              userBean.setAge(17);
              userBean.setUsername(null);
      
              Set<ConstraintViolation<UserBean>> constraintViolations = validator.validate(userBean);
              System.out.println("validate 校验对象属性:");
              System.out.println(constraintViolations);
      
              constraintViolations = validator.validateProperty(userBean, "age");
              System.out.println("validateProperty校验age属性是否合规:");
              System.out.println(constraintViolations);
      
              constraintViolations = validator.validateValue(UserBean.class , "age", 14 );
              System.out.println("validateValue校验age属性的值是否合规:");
              System.out.println(constraintViolations);
          }
      }
      
    • 非Spring项目中的Validator使用
      public class ValidationUtils {
          public static Validator getValidator(){
              ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
              return factory.getValidator();
          }
      }
      
      public class ValidatorTest {
          public static void main(String[] args) {
              Validator validator = ValidationUtils.getValidator();
              UserBean userBean = new UserBean();
              userBean.setAge(17);
              userBean.setUsername(null);
      
              Set<ConstraintViolation<UserBean>> constraintViolations = validator.validate(userBean);
              System.out.println("validate 校验对象属性:");
              System.out.println(constraintViolations);
      
              constraintViolations = validator.validateProperty(userBean, "age");
              System.out.println("validateProperty校验age属性是否合规:");
              System.out.println(constraintViolations);
      
              constraintViolations = validator.validateValue(UserBean.class , "age", 14 );
              System.out.println("validateValue校验age属性的值是否合规:");
              System.out.println(constraintViolations);
          }
      }
      

测试结果

  • 校验对象属性
    • 显示违反约束条件的字段及其提示信息。
  • 校验特定属性
    • 仅显示特定属性违反约束条件的提示信息。
  • 校验属性值
    • 显示给定属性值是否符合约束条件的提示信息。

总结

  • 依赖Spring容器的方法和不依赖Spring容器的方法。
  • 建议使用不依赖Spring容器的方法,可以将获取Validator的代码封装成工具类,统一管理校验方法。

标签:Spring,校验,System,Controller,Validator,参数,println,out
From: https://blog.csdn.net/modelsetget/article/details/140489728

相关文章

  • E9-控制移动建模应用页面中的提交按钮根据日期条件校验是否可提交
    背景在移动建模页面中提交表单时,有时需要根据表单上的日期字段校验是否满足提交条件,如果满足则可提交,如果不满足则不可提交本期以报餐管理场景为例:实现控制用户只能在指定的时间范围内提交报餐数据实现效果1、若当前时间不在指定的时间范围内,则提交失败;2、若当前时间在指......
  • 在存储过程输入输出参数中使用json
    SqlServer从2016开始支持json操作,JSON支持适用于SqlServer2016及以上版本和AzureSQLDatabase。sqlserver文档参考这里。有了这个json支持,默认过程只传入一个json字符串参数就可以了,方便很多。我们可以在内部做很多事情。甚至可以校验参数,鉴权或将结果集封装为标准的......
  • C++入门(3)inline函数与缺省参数
    一.inline函数当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。当函数功能简单,使用频率很高,为了提高效率,直接将函数的代码镶嵌到程序中。但这个方法有缺点,一是相同代码重复书写,二是程序的可读性往往没有......
  • 【wyTest自动化测试】快照校验模式的创新实践
    本文将以遥遥领先的【华为商城】web端自动化为例,进行测试脚本开发的讲解。仅用于教学指导使用,如有侵权,请联系我删除。一、测试脚本结构        按照教程惯例,开篇先展示一下测试脚本的标准结构模版:case_xx特性_xx001.pyclassCaseTest:testAbout="""****......
  • 揭秘 Java 变长参数:如何优雅地处理不定数量的字符串
    哈喽,大家好,我是木头左!理解变长参数:基础概念在Java中,变长参数也称为可变参数,它允许你传递任意数量的参数到一个方法中。这个特性是通过使用三个点符号...来实现的。当你在方法的参数列表中使用...时,任何传递给该方法的额外参数都会被当作数组来处理。这为提供了一种灵活的方式......
  • HTTP服务工具类,包括带参数的 post/http get/http get 方法
    1、导入maven依赖<!--apachehttpclient客户端工具包--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.3</version>......
  • Linux的top命令参数详解
    简介top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top显示系统当前的进程和其他状况,是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准......
  • C++(函数参数为数组与指针算术)
    目录1.函数参数为数组2.指针算术2.1arr是指向第一个元素的地址2.2arr[i]表示什么?#include<iostream>voidprintArray(intarr[],intsize){for(inti=0;i<size;++i){std::cout<<arr[i]<<"";}}intmain(){intarr[5]......
  • 向url中的添加参数,要求传递对象后解析成参数到url上
    例如:传参{name:'张三',age:18},functionurlFn(obj){ leturl='http://www.alibb.com' letkeys=Object.keys(obj) letvalues=Object.values(obj) url+='?' for(leti=0;i<keys.length;i++){ if(i==keys.length-......
  • rbd常用的配置参数
    本文分享自天翼云开发者社区《rbd常用的配置参数》,作者:l****nrbd的基本介绍rbd的架构如下图所示:rbd采用CRUSH算法实现数据的随机分布。CRUSH算法,即ControlledReplicationUnderScalableHashing,是一种基于哈希的数据分布算法。CRUSH算法以数据唯一标识符、当前存储集群的拓......