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

spring boot 12

一、自定义校验(@State注解)

1. 自定义注解@State

用于校验文章状态是否为已发布草稿

java

运行

import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = StateValidation.class) public @interface State { // 校验失败的提示信息 String message() default "文章状态只能是:已发布或者草稿"; // 分组校验支持 Class[] groups() default {}; // 负载信息 Class<? extends Payload>[] payload() default {}; }

2. 校验逻辑实现类StateValidation

实现ConstraintValidator接口,编写具体校验规则:

java

运行

import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class StateValidation implements ConstraintValidator<State, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context) { // 状态不能为空 if (value == null) { return false; } // 校验是否为允许的状态值 return value.equals("已发布") || value.equals("草稿"); } }

3. 在实体类中使用@State注解

java

运行

@Data public class Article { private Integer id; // 主键ID @NotEmpty(message = "文章标题不能为空") private String title; // 文章标题 @NotEmpty(message = "文章内容不能为空") private String content; // 文章内容 private String coverImg; // 封面图像 @State(message = "文章状态只能是:已发布或者草稿") private String state; // 发布状态:已发布/草稿 @NotNull(message = "文章分类ID不能为空") private Integer categoryId; // 文章分类ID private Integer createUser; // 创建人ID private LocalDateTime createTime; // 创建时间 private LocalDateTime updateTime; // 更新时间 }

二、新增文章接口实现

1. Controller 层

java

运行

@RestController @RequestMapping("/article") public class ArticleController { @Autowired private ArticleService articleService; @PostMapping public Result add(@RequestBody @Validated Article article) { articleService.add(article); return Result.success(); } }

2. Service 层

java

运行

@Service public class ArticleServiceImpl implements ArticleService { @Autowired private ArticleMapper articleMapper; @Override public void add(Article article) { // 从 ThreadLocal 获取当前登录用户ID Map<String, Object> claims = ThreadLocalUtil.get(); Integer userId = (Integer) claims.get("id"); // 自动填充字段 article.setCreateUser(userId); LocalDateTime now = LocalDateTime.now(); article.setCreateTime(now); article.setUpdateTime(now); articleMapper.add(article); } }

3. Mapper 层(SQL)

java

运行

@Mapper public interface ArticleMapper { @Insert("insert into article(title, content, cover_img, state, category_id, create_user, create_time, update_time) " + "values(#{title}, #{content}, #{coverImg}, #{state}, #{categoryId}, #{createUser}, #{createTime}, #{updateTime})") void add(Article article); }

三、关键注意事项

  1. 自定义校验生效条件

    • 自定义注解上添加@Constraint(validatedBy = StateValidation.class),关联校验实现类
    • 实体类字段上添加@State注解
    • Controller 接口参数前添加@Validated注解,开启校验
  2. 新增文章接口字段校验

    • title:非空校验(@NotEmpty
    • content:非空校验(@NotEmpty
    • categoryId:非空校验(@NotNull
    • state:自定义校验(@State),必须为已发布草稿
  3. 用户 ID 安全获取

    • 不要由前端传入createUser,统一从ThreadLocal中获取,避免越权发布文章
  4. 时间字段自动填充

    • 新增时createTimeupdateTime都设置为当前时间,保证数据一致性
http://www.zskr.cn/news/1362337.html

相关文章:

  • JavaJDK+Tomcat+Maven一站式配置
  • 如何快速实现智慧树自动刷课:免费开源工具的完整指南
  • 焰境·万载——新一代文旅网站制作展示
  • Claude + MS Project双引擎协同术:5分钟完成跨时区资源冲突检测与重排程,压测显示交付准时率提升41.6%
  • 通过Python快速调用Taotoken提供的多种大模型API
  • 掌握核心技术概念提升项目管理效能
  • 深度 | 昇腾NPU MoE算子实现:从TopKGating到Expert并行,稀疏激活的硬件适配
  • 2026年AI大模型API聚合站年度权威横评:五大主流平台全维度硬核实测数据选型指南
  • 集团首都公报:武汉市放飞炬人产业引导基金有限责任公司财政处批准 《武汉市放飞炬人产业引导基金有限责任公司财政处现金顾问制条令》
  • 【码上爬】 题十九:法外狂徒 相应数据加密还原,堆栈分析,扣代码
  • 前端仔的福音:用声网SDK半天接上语音AI
  • WSL2内存管理避坑指南:从Docker Desktop到.wslconfig,我的轻量开发环境搭建实录
  • Playwright 浏览器自动化完全指南:从入门到实战
  • Unity云渲染本地部署实战:断网环境下的高保真实时交互方案
  • Cursor Free VIP终极指南:三步实现AI编程助手永久免费使用
  • AI新人防迷茫指南:一篇文章带你掌握机器学习入门路线
  • 基于Intel Myriad X VPU的星载AI视觉系统:从算法优化到航天工程实践
  • DDSC在东阳修车哪家好
  • 响应式图像:优化不同设备的图片展示
  • 为什么有些论文,答辩老师越听越不敢卡?
  • 解决多 Agent 协作中的冲突与竞争
  • APK 解析包错误怎么办?5 种方法解决「解析软件包时出现问题」
  • 告别加班!Windows 一键部署 Open Claw,下班前搞定全天工作量
  • BIND DNS漏洞CVE-2025-13878:EDNS选项解析致堆越界崩溃分析
  • 幻影二级域名分发系统V1.5 最新免费二级域名分发源码
  • 手机抓包配置全指南:从连不上到解密HTTPS
  • 2026新款耳机主流品牌测评与选购指南:技术趋势与性价比解析
  • 从银色子弹,到《人月神话》,再到AICoding与个人开发的思考
  • 手把手教你用Python+OpenBMI复现运动想象BCI实验(附完整代码与数据集)
  • 【企业级AI Agent操作安全白皮书】:基于ISO/IEC 27001与NIST AI RMF的6类操作审计红线