经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring Boot » 查看文章
使用自定义注解进行restful请求参数的校验方式
来源:jb51  时间:2021/10/19 15:31:37  对本文有异议

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

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

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

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

自己的校验注解。

下面我们来看一个例子:

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

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

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

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

  1. public class ByteLengthValidator implements ConstraintValidator<ByteLength, String>{ // 实现ConstraintValidator
  2. int min;
  3. int max;
  4. String charsetName;
  5. @Override
  6. public void initialize(ByteLength constraintAnnotation) {
  7. this.min = constraintAnnotation.min();
  8. this.max = constraintAnnotation.max();
  9. this.charsetName = constraintAnnotation.charsetName();
  10. }
  11. @Override
  12. public boolean isValid(String value, ConstraintValidatorContext context) { // 实现校验规则
  13. if (null == value) {
  14. return min <= 0;
  15. }
  16. try {
  17. int length = value.getBytes(charsetName).length;
  18. return length >= min && length <= max;
  19. } catch (UnsupportedEncodingException e) {
  20. e.printStackTrace();
  21. return false;
  22. }
  23. }
  24. }

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

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

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

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

restful风格接口参数校验

在这里插入图片描述

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

在这里插入图片描述

自定义参数校验注解方法

1>定义自定义注解

在这里插入图片描述

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

在这里插入图片描述

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号