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

 更新时间:2021年10月19日 16:00  点击:2190

自定义注解进行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>定义参数校验逻辑的处理类

在这里插入图片描述

以上为个人经验,希望能给大家一个参考,也希望大家多多支持猪先飞.

[!--infotagslink--]

相关文章

  • Swagger中@ApiIgnore注解的使用详解

    这篇文章主要介绍了Swagger中@ApiIgnore注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-21
  • Nest.js参数校验和自定义返回数据格式详解

    这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
  • 校验非空的注解@NotNull如何取得自定义的message

    这篇文章主要介绍了校验非空的注解@NotNull如何取得自定义的message,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-29
  • Spring为什么不推荐使用@Autowired注解详析

    @Autowired 注解的主要功能就是完成自动注入,使用也非常简单,但这篇文章主要给大家介绍了关于Spring为什么不推荐使用@Autowired注解的相关资料,需要的朋友可以参考下...2021-11-03
  • Java中lombok的@Builder注解的解析与简单使用详解

    这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06
  • 处理@PathVariable注解允许参数为空、允许不传参数的问题

    这篇文章主要介绍了处理@PathVariable注解允许参数为空、允许不传参数的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-23
  • Mybatis用注解写in查询的实现

    这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13
  • 详解element-ui 表单校验 Rules 配置 常用黑科技

    这篇文章主要介绍了element-ui 表单校验 Rules 配置 常用黑科技,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • 解决@Transactional注解事务不回滚不起作用的问题

    这篇文章主要介绍了解决@Transactional注解事务不回滚不起作用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-23
  • 解决antd Form 表单校验方法无响应的问题

    这篇文章主要介绍了解决antd Form 表单校验方法无响应的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-28
  • @Query注解的原生用法和native用法解析

    这篇文章主要介绍了@Query注解的原生用法和native用法解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-27
  • 聊聊@RequestParam,@PathParam,@PathVariable等注解的区别

    这篇文章主要介绍了聊聊@RequestParam,@PathParam,@PathVariable等注解的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-23
  • springboot RESTful以及参数注解的使用方式

    这篇文章主要介绍了springboot RESTful以及参数注解的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-19
  • 深入浅析Restful接口的两种使用方式

    restful接口常用的两种方式是get和post.接下来通过本文给大家介绍Restful接口的两种使用方式,本文给大家介绍的非常详细,需要的朋友参考下吧...2020-06-25
  • vue实现滑块拖拽校验功能的全过程

    vue验证滑块功能,在生活中很多地方都可以见到,使用起来非常方便,这篇文章主要给大家介绍了关于vue实现滑块拖拽校验功能的相关资料,需要的朋友可以参考下...2021-08-04
  • 浅谈基于SpringBoot实现一个简单的权限控制注解

    这篇文章主要介绍了基于SpringBoot实现一个简单的权限控制注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-01
  • SpringCloud之@FeignClient()注解的使用方式

    这篇文章主要介绍了SpringCloud之@FeignClient()注解的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • 基于Column注解的columnDefinition用法

    这篇文章主要介绍了Column注解的columnDefinition用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-25
  • JUnit5常用注解的使用

    注解是JUnit的标志性技术,本文就来对它的20个注解,以及元注解和组合注解进行学习,感兴趣的可以了解一下...2021-07-03
  • 详解javascript传统方法实现异步校验

    这篇文章主要为大家介绍了javascript实现异步校验的方法,感兴趣的小伙伴们可以参考一下...2016-01-24