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

@Validation 的使用 Spring

校验,任何程序都需要的基础动作。

import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.groups.Default;

Validation 注解提供了 Spring Boot 丰富的校验使用。

参数校验

@RestController
@RequestMapping("/user")
@Validated
@Slf4j
public class UserController {@Autowiredprivate UserService userService;/*** 注册用户* @param username* @param password* @return*/@PostMapping("/register")public Result register(@Pattern(regexp = "^\\S{5,16}$") String username,@Pattern(regexp = "^\\S{5,16}$") String password) {// 确定用户是否存在User user = userService.findByUsername(username);if (user != null) {return Result.error(ErrorMessage.REGISTER_ERROR);}else {String md5PW = Md5Util.getMD5String(password);     // 对 password 进行 md5 加密userService.register(username,md5PW);return Result.success();}}

实体类校验

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {@NotNullprivate Integer id;//主键ID@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryName;//分类名称@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryAlias;//分类别名private Integer createUser;//创建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//创建时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新时间
}

分组校验

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Category {@NotNull(groups = Update.class)private Integer id;//主键ID@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryName;//分类名称
//    @NotEmpty(groups = {Add.class,Update.class})@NotEmpty@Pattern(regexp = "^\\S{3,10}$")private String categoryAlias;//分类别名private Integer createUser;//创建人ID@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//创建时间@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime updateTime;//更新时间// 定义 groups 分组public interface Add extends Default {}public interface Update extends Default {}
}

说明:

1. 如果不设置分组校验,则默认为 Default 分组

2. 分组校验,有继承能力,即 A extends B

所以代码

//    @NotEmpty(groups = {Add.class,Update.class})
    @NotEmpty

实体类校验,需要方法上

    /*** 新增分类* @param category* @return*/@PostMappingpublic Result add(@RequestBody @Validated(Category.Add.class) Category category) {log.info("新增分类:{}", category);categoryService.add(category);return  Result.success();}

和 

    /*** 更新文章分类* @param category* @return*/@PutMappingpublic Result update(@RequestBody @Validated(Category.Update.class) Category category) {log.info("分类详情 {}", category);categoryService.update(category);return Result.success();}

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

相关文章:

  • Matlab图像清晰度评价指标
  • 如何在网页里填写 PDF下拉框
  • STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
  • Spring Boot 项目中Http 请求如何对响应体进行压缩
  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • php列表头部增加批量操作按钮,多选订单数据批量微信退款(含微信支付SDK)
  • 洛谷-P3375 【模板】KMP
  • 前端导出PDF(适配ios Safari浏览器)
  • 常见的网络协议有哪些
  • 图像匹配算法 笔记2025
  • 【从零学习JVM|第七篇】快速了解直接内存
  • Qt QTcpSocket的write无法发送数据【已解决】
  • 打卡day52
  • UE5制作与云渲染配置不足?3090/4090显卡云端解放创作力
  • 基于sample_aiisp例子,创建3路编码流,记录
  • 奥威BI:用AI重新定义数据分析,中小企业数字化转型的智能引擎
  • 力扣HOT100之技巧:31. 下一个排列
  • CMS软件以及常见分类
  • excel中自定义公式
  • 基于 Nginx 服务器的泛域名 SSL 证书申请与部署
  • 腾讯云:6月30日起,自动禁用,及时排查
  • keil5怎么关闭工程
  • JavaScript中的迭代器模式:优雅遍历数据的“设计之道”
  • React---Hooks深入
  • vue3 全局过滤器
  • 【Docker 04】image - 镜像
  • 《一本书看透A股》速读笔记
  • Python----神经网络发(神经网络发展历程)
  • 水库大坝安全监测之渗流监测
  • 理解LLM所谓的“推理”能力