@NotBlank(message = “{xxx}“) 注解中花括号的含义
【SpringBoot 实战】NotBlank(message {auth.clientid.not.blank}) 花括号里的是什么一、问题场景最近在看项目的登录代码LoginBody.java发现一个很有意思的写法NotBlank(message {auth.clientid.not.blank}) private String clientId;以前我写的校验注解都是这样的NotBlank(message 客户端ID不能为空) private String clientId;为什么要用花括号{}包起来直接写文案不好吗auth.clientid.not.blank这一串是啥意思二、答案这是国际化i18n的消息配置写法花括号{}包裹的内容是一个消息键Message Key它的作用是告诉校验框架别直接把{auth.clientid.not.blank}当错误文案返回而是去国际化资源文件中查找对应 key 的实际文案。用一张图理解前端传参 clientId 为空 │ ▼ NotBlank 校验失败 │ ▼ 看到 message {auth.clientid.not.blank} │ ▼ 去 messages_zh_CN.properties 找 key │ ├── key: auth.clientid.not.blank 认证客户端id不能为空 │ ▼ 返回给前端认证客户端id不能为空三、项目中的实际配置在 SpringBoot 项目的 resources 目录下通常会有几个 properties 文件文件名语言环境内容示例messages.properties默认中文auth.clientid.not.blank认证客户端id不能为空messages_zh_CN.properties简体中文auth.clientid.not.blank认证客户端id不能为空messages_en_US.properties英文auth.clientid.not.blankAuth clientid cannot be blankmessages_ja_JP.properties日文auth.clientid.not.blank認証クライアントIDは空にできません**校验框架会根据当前请求的语言请求头Accept-Language自动选择对应的文件请求头 Accept-Language返回的错误信息zh-CN,zh;q0.9认证客户端id不能为空en-US,en;q0.9Auth clientid cannot be blankja-JP,ja;q0.9認証クライアントIDは空にできません四、两种写法的对比写法示例优缺点硬编码NotBlank(message 客户端id不能为空)✅ 写起来简单❌ 不支持多语言❌ 改文案要改 Java 代码消息键推荐NotBlank(message {auth.clientid.not.blank})✅ 支持多语言切换✅ 改文案只改 properties 文件✅ 文案统一管理不会漏改❌ 多写一层配置五、花括号语法从哪来的这不是 Spring 独创的而是 **JSR-303 / JSR-380Bean Validation规范定义的标准语法语法含义message xxx直接返回字符串message {xxx}去资源文件查找 key 对应的值message {xxx} {yyy}支持拼接两个 key 都会解析message 长度必须在 {min} 到 {max} 之间甚至可以引用注解参数比如Size注解可以这样用Size(min 2, max 10, message 用户名长度必须在 {min} 到 {max} 之间) private String username;校验失败时会自动替换用户名长度必须在 2 到 10 之间六、SpringBoot 中怎么配置1. 新建国际化资源文件在resources/i18n/目录下或者直接resources/resources/ ├── messages.properties # 默认 ├── messages_zh_CN.properties └── messages_en_US.properties2. 在application.yml配置spring: messages: basename: i18n/messages # 如果在 i18n 目录下 encoding: UTF-83. 配置 LocaleResolver可选基于请求头切换语言Configuration public class I18nConfig { Bean public LocaleResolver localeResolver() { AcceptHeaderLocaleResolver resolver new AcceptHeaderLocaleResolver(); resolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); return resolver; } }这样前端在 DTO 上直接用NotBlank(message {user.username.not.blank}) private String username;七、总结问题答案{auth.clientid.not.blank}是什么国际化资源文件中的 **消息 key为什么用花括号JSR-303 规范的语法告诉框架去解析 key好处是什么支持多语言、文案统一管理、改文案不用改代码

相关新闻

Git 分支误操作修复指南 —— 代码写在 master 分支了,其实应该在 dev 分支

Git 分支误操作修复指南 —— 代码写在 master 分支了,其实应该在 dev 分支

【Git 踩坑记录:代码已经在 master 上开发了,怎么转到 dev 分支的三种修复方案一、场景描述问题场景:开开心心写了一下午代码,Commit 完了,突然发现——啊!我应该在 dev 分支开发,怎么在 master…

2026/7/23 12:37:07 阅读更多 →
OCR字段提取优化:从文字识别到结构化数据的技术实践

OCR字段提取优化:从文字识别到结构化数据的技术实践

1. 项目背景与需求解析"113 OCR字段提取优化"这个项目名称看似简单,却蕴含了OCR技术在实际业务场景中的核心痛点。作为从业多年的OCR技术实践者,我深知在复杂文档处理中,字段提取的准确率直接决定了整个OCR系统的实用价值。在政务文…

2026/7/23 12:36:07 阅读更多 →
时空大数据企业哪家值得推荐?政企场景下的私有化服务选型

时空大数据企业哪家值得推荐?政企场景下的私有化服务选型

在政务、金融、能源等对数据安全有高要求的行业,私有化部署是时空大数据服务的核心准入条件,相关企业时常会询问时空大数据企业哪家值得推荐。丰图科技是市场上少数能够提供成熟本地化部署方案的地址解析服务商,在政企场景中积累了丰富的落地经验。政企场景对时空大数据服务的特…

2026/7/23 12:36:07 阅读更多 →

最新新闻

计算机毕业设计之智慧学伴服务平台

计算机毕业设计之智慧学伴服务平台

在各学校的教学过程中,学生的课程是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“智慧学伴服务平台”的研究和设计也成为教育技术领域的热点课题。采用当前流…

2026/7/23 12:54:15 阅读更多 →
Visual C++运行库缺失与冲突的完整修复指南:从诊断到彻底解决

Visual C++运行库缺失与冲突的完整修复指南:从诊断到彻底解决

1. 项目概述:为什么Visual C运行库如此重要? 如果你在Windows上打开某个软件或游戏时,突然弹出一个“找不到msvcp140.dll”或“应用程序无法正常启动(0xc000007b)”的错误,十有八九,问题就出在Visual C运行库上。这玩意…

2026/7/23 12:54:15 阅读更多 →
扣子工作流设计全解析,深度拆解12类高频场景模板(客服/销售/HR/教育全覆盖)

扣子工作流设计全解析,深度拆解12类高频场景模板(客服/销售/HR/教育全覆盖)

更多请点击: https://kaifayun.com 第一章:扣子工作流设计核心理念与架构全景 扣子(Coze)工作流设计以“低代码编排、高语义表达、强上下文感知”为三大核心理念,强调将业务逻辑从平台能力中解耦,通过可视…

2026/7/23 12:54:15 阅读更多 →
提示词失效真相大起底,Sora生成质量断崖式下滑的4个隐藏陷阱及修复方案

提示词失效真相大起底,Sora生成质量断崖式下滑的4个隐藏陷阱及修复方案

更多请点击: https://codechina.net 第一章:Sora提示词失效的底层归因与现象复现 Sora模型在实际提示工程中频繁出现“提示词失效”现象——即语义明确、语法合规、结构完整的提示输入未能触发预期视频生成结果,甚至返回空帧、逻辑断裂或完…

2026/7/23 12:54:15 阅读更多 →
TAS2521音频编解码器:数字接口、电源管理与调试全解析

TAS2521音频编解码器:数字接口、电源管理与调试全解析

1. 项目概述与核心价值在嵌入式音频系统设计中,音频编解码器(Codec)是连接数字世界与模拟声音的桥梁。而数字音频接口,则是这座桥梁上确保数据准确、高效通行的“交通规则”。很多工程师在初次接触像德州仪器(TI&#…

2026/7/23 12:54:14 阅读更多 →
Tiva C系列GPTM定时器B模式寄存器配置与应用实战

Tiva C系列GPTM定时器B模式寄存器配置与应用实战

1. GPTM定时器B模式寄存器深度解析 在嵌入式开发中,定时器是驱动一切时序逻辑的“心跳”。无论是精确的延时、PWM信号生成,还是捕获外部事件的脉宽,都离不开对定时器寄存器的精准操控。Tiva™ C系列微控制器的通用定时器模块功能强大&#xf…

2026/7/23 12:53:14 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻