使用自定义注解进行restful请求参数的校验方式

 更新时间:2021年10月19日 11:59:52   作者:teng_sd_cn  
这篇文章主要介绍了使用自定义注解进行restful请求参数的校验方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

自定义注解进行restful请求参数的校验

在使用springmvc开发的时候,我们通常会在controller中的方法参数实体类中加上@NotNull()等类似注解,然后在方法参数上加上

@Vilad 注解,这样在有请求的时候,就会自动按照我们的注解进行参数是否合法,避免了我们手工的校验。

但是,自带的校验注解有的时候并不能满足我们的业务验证需求,因此,我们就有必要进行自定义校验注解,以业务为需求定制我们

自己的校验注解。

下面我们来看一个例子:

1、首先我们使用@interface定义一个注解

@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = ByteLengthValidator.class)// 使用@Constraint指定注解校验实现类,这是一个限制型注解,只能使用指定的实现类
@Documented
public @interface ByteLength {
    int min() default 0; 
    int max() default 2147483647; 
    String charsetName() default "GBK"; 
    String message() default "的长度只能在{min}和{max}之间"; 
    Class<?>[] groups() default {}; 
    Class<? extends Payload>[] payload() default {};
}

2、实现注解实现类(和@interface定义的注解在同一个包下)

注解实现类需要实现ConstraintValidator 接口

public class ByteLengthValidator implements ConstraintValidator<ByteLength, String>{   // 实现ConstraintValidator 
 int min;
 int max;
        String charsetName;
 
 @Override
 public void initialize(ByteLength constraintAnnotation) {
  this.min = constraintAnnotation.min();
  this.max = constraintAnnotation.max();
        this.charsetName = constraintAnnotation.charsetName();
 }
 
 @Override
 public boolean isValid(String value, ConstraintValidatorContext context) {   // 实现校验规则
        if (null == value) {
            return min <= 0;
        } 
        try {
            int length = value.getBytes(charsetName).length;
            return length >= min && length <= max;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return false;
        }
 }
}

3、在需要校验的对象的字段上加上@ByteLength注解

然后在接口方法的该对象参数上加上@Vilad 注解,在接收的请求的时候,就会使用

我们自定义的@ByteLength 进行校验该字段。

springboot小技巧:restful接口参数校验,自定义校验规则

restful风格接口参数校验

在这里插入图片描述

在接收参数的实体类的属性上添加默认的注解或者自定义注解

在这里插入图片描述

自定义参数校验注解方法

1>定义自定义注解

在这里插入图片描述

2>定义参数校验逻辑的处理类

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家.

相关文章

  • spring security需求分析与基础环境准备教程

    spring security需求分析与基础环境准备教程

    这篇文章主要为大家介绍了spring security需求分析与基础环境准备教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 深入理解JVM之Java对象的创建、内存布局、访问定位详解

    深入理解JVM之Java对象的创建、内存布局、访问定位详解

    这篇文章主要介绍了深入理解JVM之Java对象的创建、内存布局、访问定位,结合实例形式详细分析了Java对象的创建、内存布局、访问定位相关概念、原理、操作技巧与注意事项,需要的朋友可以参考下
    2019-09-09
  • Java中使用opencsv读写csv文件示例

    Java中使用opencsv读写csv文件示例

    这篇文章主要介绍了Java中使用opencsv读写csv文件示例,本文给出了读CSV文件、写CSV文件、自定义分隔符、生成Javabeans等内容,需要的朋友可以参考下
    2015-04-04
  • Java自然排序Comparable使用方法解析

    Java自然排序Comparable使用方法解析

    这篇文章主要介绍了Java自然排序Comparable使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java split()方法中的特殊符号举例详解

    Java split()方法中的特殊符号举例详解

    Java中的split方法可以将一个字符串按照指定的分隔符进行分割,返回一个字符串数组,这篇文章主要给大家介绍了关于Java split()方法中的特殊符号的相关资料,需要的朋友可以参考下
    2023-07-07
  • Java中的abstract和interface

    Java中的abstract和interface

    abstract和interface关键字在Java中随处可见,它是Java三大特性封装、继承、多态特性的实现重要支柱之一。interface关键字用于定义接口抽象,其本质上是用于定义类型、定义类所具有的能力,下面来看看详细内容,需要的朋友可以参考一下
    2021-11-11
  • SpringBoot项目没有把依赖的jar包一起打包的问题解决

    SpringBoot项目没有把依赖的jar包一起打包的问题解决

    这篇文章主要介绍了SpringBoot项目没有把依赖的jar包一起打包的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java动态代理实现_动力节点Java学院整理

    Java动态代理实现_动力节点Java学院整理

    动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程
    2017-08-08
  • java判断两个时间是不是同一天的方法

    java判断两个时间是不是同一天的方法

    这篇文章主要介绍了java判断两个时间是不是同一天的方法,需要的朋友可以参考下
    2014-02-02
  • Java Benchmark 基准测试的实例详解

    Java Benchmark 基准测试的实例详解

    这篇文章主要介绍了Java Benchmark 基准测试的实例详解的相关资料,这里提供实例帮助大家学习理解这部分内容,需要的朋友可以参考下
    2017-08-08

最新评论