2026/6/11 18:18:13
网站建设
项目流程
甘肃建设体网站首页,房产网签查询,桂林网站建设培训班,网页设计模板素材美食结论先行#xff1a;前端统一 snake_case#xff0c;后端统一 camelCase#xff0c;由 Jackson 全局自动完成双向映射。这是 Jackson 层面的统一协议问题#xff0c;不应该在 DTO/VO 上“手工处理”。
在 大项目体量里#xff0c;必须做到全局自动转换、零侵入、零重复注解…结论先行前端统一 snake_case后端统一 camelCase由 Jackson 全局自动完成双向映射。这是Jackson 层面的统一协议问题不应该在 DTO/VO 上“手工处理”。在 大项目体量里必须做到全局自动转换、零侵入、零重复注解。一、核心机制Jackson 命名策略双向自动Jackson 原生支持序列化 反序列化同时生效。场景行为Request JSON → Java DTOaccess_token→accessTokenJava VO → Response JSONaccessToken→access_token无需在字段上写任何注解。二、推荐方案全局配置唯一入口1. application.yml首选最干净spring:jackson:property-naming-strategy:SNAKE_CASE这一行就够了。2. 等价 Java 配置如果你偏代码化ConfigurationpublicclassJacksonConfig{BeanpublicObjectMapperobjectMapper(){ObjectMappermappernewObjectMapper();mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);returnmapper;}}建议用yml避免 ObjectMapper 多实例污染。三、示例LoginRequest / LoginVO1. LoginRequest后端代码驼峰publicclassLoginRequest{privateStringaccount;privateStringpassword;privateStringloginType;}前端请求 JSON下划线{account:13800138000,password:123456,login_type:PASSWORD}Jackson 自动映射为loginRequest.getLoginType();// PASSWORD2. LoginVO后端代码驼峰publicclassLoginVO{privateStringaccessToken;privateStringrefreshToken;privateLongexpiresIn;}返回给前端 JSON自动下划线{access_token:xxx,refresh_token:yyy,expires_in:7200}四、为什么这是大项目必须采用的方式1. 前端世界就是 snake_caseiOS / Android / 小程序 / OpenAPI多语言 SDK 生成器默认 snake_caseJSON Schema / OpenAPI 更友好2. Java 世界必须 camelCaseLombok / Bean 规范MyBatis / MapStructIDE 自动补全3. 中间层自动转换才是工业级解法五、禁止的“反模式”踩一个就会后悔❌ 每个字段写 JsonPropertyJsonProperty(access_token)privateStringaccessToken;问题DTO 爆炸重构成本极高其他开发人员一定骂你❌ Request / Response 分两套字段名privateStringaccess_token;问题Java 规范被破坏IDE / Lombok / Mapper 全部痛苦六、特殊情况如何处理白名单1. 单字段例外JsonProperty(openid)privateStringopenId;只在第三方强绑定字段历史兼容接口2. 禁止自动转换的字段JsonNaming(PropertyNamingStrategies.LowerCamelCaseStrategy.class)publicclassThirdPartyCallbackRequest{}七、与 Swagger / OpenAPI 的一致性启用后Swagger 显示字段名access_token后端字段accessToken文档 实际接口八、最终统一规范一句话版后端代码只写驼峰API 协议只暴露下划线Jackson 全局负责翻译。