当前位置: 首页 > news >正文

SpringBoot 参数校验

参数校验

  1. 引入springvalidation依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  1. 参数前添加@Pattern

    public Result registry(@Pattern(regexp = "^\\S{5,16}$") String username, @Pattern(regexp = "^\\S{5,16}$") String password) {}
    
  2. 类上添加@Validated

    @Validated
    public class UserController {}
    

异常:jakarta.validation.ConstraintViolationException: registry.password: 需要匹配正则表达式"^\S{5,16}$", registry.username: 需要匹配正则表达式"^\S{5,16}$"

封装对象

对于封装的对象参数:

@PutMapping("/update")
public Result update(@RequestBody @Validated User user) {userService.update(user);return Result.success();
}
@Data
public class User {@NotNullprivate Integer id;private String username;@JsonIgnoreprivate String password;@NotEmpty@Pattern(regexp = "^//S{1,10}$")private String nickname;@NotEmpty@Emailprivate String email;private String user_pic;private LocalDateTime createTime;private LocalDateTime updateTime;
}

分组校验

多个接口对参数的要求不统一会导致混乱和错误

使用分组校验的方式:

@Data
public class Category {@NotNull(groups = Update.class)private Integer id;@NotEmpty(groups = {Add.class, Update.class})private String categoryName;@NotEmpty(groups = {Add.class, Update.class})private String categoryAlias;public interface Add{}public interface Update{}
}
public Result addCategory(@RequestBody @Validated(Category.Add.class) Category category){}
@PutMapping
public Result update(@RequestBody @Validated(Category.Update.class) Category category) {}

未指定的默认属于Default分组,也可以:

@Data
public class Category {@NotNull(groups = Update.class)private Integer id;@NotEmptyprivate String categoryName;@NotEmptyprivate String categoryAlias;public interface Add extend Default{}public interface Update extend Default{}
}

自定义参数校验

已有的注解不能满足校验要求,需要自定义注解

  1. 首先定义自定义注解

    @Documented
    @Target({ElementType.FIELD})
    @Retention(RetentionPolicy.RUNTIME)
    // 指定校验规则
    @Constraint(validatedBy = {MyValidation.class}
    )
    public @interface Vali {// 校验失败后的提示信息String message() default "只能是“已发布”或者“草稿”";// 指定分组Class<?>[] groups() default {};// 获取附加信息Class<? extends Payload>[] payload() default {};
    }
  2. 定义处理规则

    public class MyValidation implements ConstraintValidator<Vali, String> {@Overridepublic boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {// 提供校验规则return "已发布".equals(s) || "草稿".equals(s);}
    }
    
  3. 使用方式和其他注解一致

http://www.lryc.cn/news/387177.html

相关文章:

  • 【Arduino】实验使用ESP32控制可编程继电器制作跑马灯(图文)
  • islower()方法——判断字符串是否全由小写字母组成
  • 发布/订阅模式
  • K8S Pod常见状态
  • Hadoop3:Yarn常用Shell命令
  • 15.数据库简介+MySQl使用+SQL语句
  • AI入门系列:工具篇之ChatGPT的优秀的国内替代品
  • 改机软件有哪些?实现一键新机、改串号、改IMEI和手机参数的需求 硬改手机软件,新机环境模拟 设备伪装,一键改机,一键复原
  • 如何快速使用JNI
  • simulink开发stm32,使用中断模块,无法产生中断,其中包括使用timer模块,以及ADC都无法产生中断,需要注意的地方
  • C# 如何单纯的优化循环
  • 【鸿蒙学习笔记】@Extend装饰器:定义扩展组件样式
  • 【Docker项目实战篇】Docker部署PDF多功能工具Stirling-PDF
  • 【算法训练记录——Day37】
  • OpenCV 张正友标定法(二)
  • LeetCode题练习与总结:环形链表Ⅱ--142
  • 【kaptcha】kaptcha验证码的使用-SpringBoot集成
  • golang template模板嵌套语法 为何不能使用变量 底层源码解析
  • 【Linux】线程Thread
  • RAG技术:在自然语言处理中的深度融合与创新
  • 什么是std::bind
  • C语言的数据结构:树与二叉树(哈夫曼树篇)
  • docker 安装syslog
  • 什么是无头浏览器?
  • 【面试干货】与的区别:位运算符与逻辑运算符的深入探讨
  • 搭建Renesas R7FA8D1BHECBD-BTB的开发调试环境(DAP-LINK: N32G45XVL-STB)
  • 探索人工智能和LLM对未来就业的影响
  • 钓鱼网站原理与攻防
  • Windows 中 Chrome / Edge / Firefox 浏览器书签文件默认存储路径
  • 秋招Java后端开发冲刺——关系型数据库篇(Mysql)