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

后端参数校验

前端给后端传输数据,有时候参数需要校验,我们自己写代码会比较麻烦,我们可以使用springboot为我们提供的注解,降低这些没有必要的代码开发。

1.引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>

2.常用注解说明

• @NotNull:值不能为null;

• @NotEmpty:字符串、集合或数组的值不能为空,即⻓度⼤于0;
• @NotBlank:字符串的值不能为空⽩,即不能只包含空格;
• @Size:字符串、集合或数组的⼤⼩是否在指定范围内;
• @Min:数值的最⼩值;
• @Max:数值的最⼤值;
• @Pattern:字符串是否匹配指定的正则表达式;
• @Email:字符串是否为有效的电⼦邮件地址;
• @Future:⽇期是否为将来的⽇期;

• @Past:⽇期是否为过去的⽇期;

3.使用案例

@Validated:⽤于标记,某个类将触发验证

@GetMapping("/validation")
public String validation(@Validated ValidationDTO validationDTO) {return "参数校验测试";
}
@Getter
@Setter
public class ValidationDTO {@NotBlank(message = "⽤⼾账号不能为空")private String userAccount;@NotBlank(message = "⽤⼾密码不能为空")@Size(min = 5, max = 10, message = "密码⻓度不能少于6位,不能⼤于10位")private String password;@Min(value = 0, message = "年龄不能⼩于0岁")@Max(value = 60, message = "年龄不能⼤于60岁")private int age;@Email(message = "必须符合邮箱格式")private String email;@Pattern(regexp = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$", message = "⼿机号码格式不正确")private String phone;@Past(message = "开始⽇期必须是过去的⽇期")private LocalDate startDate;@Future(message = "结束⽇期必须是未来的⽇期")private LocalDate endDate;
}

捕获异常:

@ExceptionHandler(BindException.class)
public R<Void> handleBindException(BindException e) {log.error(e.getMessage());String message = join(e.getAllErrors(),DefaultMessageSourceResolvable::getDefaultMessage, ", ");return R.fail(ResultCode.FAILED_PARAMS_VALIDATE.getCode(), message);
}private <E> String join(Collection<E> collection, Function<E, String> function, CharSequence delimiter) {if (CollUtil.isEmpty(collection)) {return StrUtil.EMPTY;}return collection.stream().map(function).filter(Objects::nonNull).collect(Collectors.joining(delimiter));
}

http://www.xdnf.cn/news/15793.html

相关文章:

  • Docker部署前后端分离项目——多项目共享环境部署
  • AI进入自动驾驶时代:OpenAI发布革命性ChatGPT Agent
  • 关于在VScode中使用git的一些步骤常用命令及其常见问题:
  • 从 C# 到 Python:6 天极速入门(第二天)
  • 【PTA数据结构 | C语言版】二叉堆的快速建堆操作
  • 数据结构:顺序表和链表
  • LeetCode1047删除字符串中的所有相邻重复项
  • Jenkins+Docker+Git实现自动化CI/CD
  • 谈进程间通信
  • Python 模块化编程全解析:模块、包与第三方库管理指南
  • [Raspberry Pi]如何將無頭虛擬顯示器服務(headless display)建置在樹莓派的Ubuntu桌面作業系統中?
  • SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言!
  • 微信小程序列表数据上拉加载,下拉刷新
  • 7.事务操作
  • 手机兼容测试服务提供商对比分析:如何选择最合适的测试平台
  • 分层图最短路径算法详解
  • Spring整合MyBatis详解
  • 通过轮询方式使用LoRa DTU有什么缺点?
  • Trae IDE:打造完美Java开发环境的实战指南
  • JUnit5 实操
  • 系统设计时平衡超时时间与多因素认证(MFA)带来的用户体验下降
  • istio如何自定义重试状态码
  • 【Jmeter】报错:An error occured:Unknown arg
  • FreeRTOS—中断管理
  • 基于pytorch深度学习笔记:2.VGGNet介绍
  • 腾讯会议本地录屏转存失败解决办法
  • 支付宝小程序 MAU(月活跃用户数)是衡量用户粘性与生态影响力的核心指标
  • 【深度学习新浪潮】AI在finTech领域有哪些值得关注的进展?
  • 专业职业评估工具,多维度数据分析
  • 【人工智能agent】--dify版本更新(通用)