当前位置: 首页 > 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.jsqmd.com/news/874433/

相关文章:

  • React 从入门到生产(八):测试与部署
  • 【论文复现】基于反步法-神经网络控制器、LOS制导和Lyapunov方法的多艘欠驱动水面船舶协调路径跟踪非线性控制Matlab代码
  • 2026年当前,江苏地区静电地板批发厂家深度解析与亚克基推荐 - 2026年企业推荐榜
  • 【独家】26电工杯a题b题完整版解答来啦!含论文与可执行代码
  • 通过Python快速调用Taotoken提供的多种大模型API
  • 从零到亿级调用量:电商客服Agent重构实录(含对话状态机+意图跳转图+人工接管SLA协议)
  • 2026年近期济宁地区专业水泥承插口管厂家盘点与选购指南 - 2026年企业推荐榜
  • 深圳鸿芯智谷·智启未来——以产教融合之力,点燃具身智能时代新引擎
  • Pico Neo3 XR开发实战:从黑屏闪退到真机运行的完整链路
  • Unity游戏多语言热更新实战:AutoTranslator核心机制与避坑指南
  • FAI-C-ST基准:基于基督教社会训导的AI价值观对齐评估实践
  • 2026年电磁加热回转窑应用白皮书烘干行业剖析:电蒸汽发生器厂家/电蒸汽炉厂家/电蒸汽锅炉厂家/电锅炉厂家/电加热回转窑厂家/选择指南 - 优质品牌商家
  • 掌握核心技术概念提升项目管理效能
  • Windows 本地 AI 智能体部署:不花一分钱,电脑自己干 80% 的重复活
  • 公差±0.005mm加工厂家有哪些?精密CNC稳定控差的工艺逻辑
  • 深度 | 昇腾NPU MoE算子实现:从TopKGating到Expert并行,稀疏激活的硬件适配
  • 2026年AI大模型API聚合站年度权威横评:五大主流平台全维度硬核实测数据选型指南
  • 基于计算机视觉与SLAM的无障碍机器人编程教学框架设计与实践
  • Unity云渲染本地部署实战:断网环境下的高保真实时交互方案
  • WSL2内存管理避坑指南:从Docker Desktop到.wslconfig,我的轻量开发环境搭建实录
  • 经典Gilbert算法如何挑战机器学习,绘制量子纠缠地图?
  • Sa-Token 单点登录(SSO)三种模式大白话详解:告别重复登录
  • Playwright 浏览器自动化完全指南:从入门到实战
  • DDSC在东阳修车哪家好
  • de风——【从零开始学Linu】 - 基础指令详解(二)
  • 【深度解析】制造业选AI Agent,应看重行业经验还是通用能力?
  • Win11当Linux用?手把手教你配置SSH服务实现远程开发与文件传输
  • 性价比高的生成式引擎优化GEO哪家专业
  • Git学习(四)
  • SQLmap Python环境配置避坑指南:从启动失败到稳定运行