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

@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();}

相关文章:

  • LeetCode--29.两数相除
  • 【慧游鲁博】【13】后端 · 文物图片识别功能完善 · 个性化文物介绍
  • 火线、零线、地线 基础知识
  • Actix-web 中的权限中间件实现
  • 智慧养老与数字健康:科技赋能老年生活,构建全方位养老体系
  • 高防IP是怎么防御的?高防IP的防御步骤又有哪些?
  • 发布5大AI课程体系,传智教育破局AI开发人才荒
  • GitHub 趋势日报 (2025年06月11日)
  • 在MATLAB命令行执行ros2node 和 ros2subscriber后,执行ros2 topic list,MATLAB卡死
  • preload、preconnect、prefetch 的作用
  • 【Java多线程从青铜到王者】阻塞队列(十)
  • bash挖矿木马事件全景复盘与企业级防御实战20250612
  • MySQL中InnoDB存储引擎底层原理与MySQL日志机制深入解析
  • HTTP 网络协议演进过程
  • centos clamav 扫描及告警配置
  • OpenCV——图像基本操作(三)
  • 数据库专家 OCP 认证培训:开启职业黄金赛道
  • 基于Springboot+UniApp+Ai实现模拟面试小工具一:系统需求分析及设计
  • TDengine 基础功能——数据写入
  • SpringCloud-seata集成到nacos
  • 老网站改版启用二级域名/百度平台商家联系方式
  • 公司的网站建设 交给谁做更好些/千锋教育学费
  • 中国建设企业协会网站/推广电话
  • 网站设计制作步骤/网站seo优化方案项目策划书
  • wordpress有主题了怎么操作/济南网站优化公司排名
  • 佛山专业网站建设团队/宁德市蕉城区