news 2026/6/15 18:17:34

key,value,isDef关键字的隐藏bug

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
key,value,isDef关键字的隐藏bug

key,value,isDef关键字的隐藏bug

前言:
有个老师傅创建表用关键字,返回的response用特殊字符导致的问题

1 ,表创建用到了关键字

表如下:

CREATE TABLE `system_xxx_config`(`id` BIGINT NOTNULLCOMMENT'主键'PRIMARY KEY,`key`varchar(255)NOTNULLCOMMENT'配置文件key',`value`varchar(512)NOTNULLCOMMENT'配置文件value',...)COMMENT'xxx配置表'COLLATE=utf8mb4_unicode_ci;

正常我们写接口,使用BaseMapper集成 MyBatis实现简单的crud
代码如下

@Override public R<GlobalConfigVo>queryxxxConfigVoByKey(String key){GlobalConfigVo configVo=newGlobalConfigVo();GlobalConfigDO configDO=globalConfigMapper.selectOne(GlobalConfigDO::getKey,key);if(Objects.isNull(configDO)){returnCommonResult.success(configVo);}BeanUtils.copyProperties(configDO,configVo);returnCommonResult.success(configVo);}

但是就是报

SQL: SELECT id, key, value, deleted, create_time, update_time, creator, updater, x_channel, x_platform FROM system_global_config WHERE deleted = 0 AND (key= ?)

Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘key, value, deleted, create_time, update_time, creator, xx,’ at line 1

; bad SQL grammar []
2025-12-23 16:53:55.138 | ERROR 7 | http-nio-48091-exec-7 [TID: N/A] | [USER_ID: 1950821235660029954] [USER_IP: 42.99.63.70] [X_CHANNEL: zp] [X_PLATFORM: middleAndroid] [DEVICE_ID: 123321] [VERSION: 1.1.0.0.1] [REQUEST_ID: 2f9275a4-c754-4122xxxa902-93c241c54947] | c.h.f.w.c.h.
简单的说就是 使用key 、value 关键字,mybatis自动生成的sql用不了,会报错。

尝试

@Override public R<GlobalxxConfigVo>queryGlobalxxxConfigVoByKey(String key){LambdaQueryWrapper<GlobalxxConfigDO>wrapper=new LambdaQueryWrapper<>();wrapper.eq(GlobalxxxConfigDO::getKey,key).eq(GlobalxxConfigDO::getDeleted,0);GlobalxxConfigDO configDO=globalxxConfigMapper.selectOne(wrapper);GlobalxxConfigVo configVo=newGlobalxxxConfigVo();BeanUtils.copyProperties(configDO,configVo);returnR.success(configVo);}

还是报错误,
最终写
sql 做mapper映射解决bug
select xxx from xxx where xxx;

2、response返回值封装触发关键字 isDef

{"code":220,"data":[{"config":"1024x","isDef":true},{"config":"2048x","isDef":false}],"msg":""}

正常封装对象:

@Data @NoArgsConstructor @AllArgsConstructor public class GlobalxxxConfigVo{private String config;private boolean isDef;}

写好后返回是:

{"code":220,"data":[{"config":"1024x","def":true},{"config":"2048x","def":false}],"msg":""}

查询原因是
问题分析:
在Java中,使用Lombok的@Data注解时,对于布尔类型的字段,Lombok生成的getter方法命名规则为:如果是基本类型boolean,字段名为isDef,则生成的getter方法为isDef(),setter方法为setDef(boolean)。但是,在序列化为JSON时,Jackson等序列化框架默认使用getter方法来确定字段名。对于布尔类型,可能会产生混淆。

字段名为isDef,Lombok生成的getter方法为isDef(),setter为setDef(boolean)。序列化框架可能会将字段名解析为def(因为getter方法名为isDef,去掉is后,首字母小写为def),所以返回的JSON中出现了def字段。

解决方案:

使用Jackson的@JsonProperty注解,指定序列化时的字段名。

@Data @NoArgsConstructor @AllArgsConstructor public class GlobalxxxConfigVo{/** * 视频彩铃分配率 */private String config;/** * 如果匹配默认的就是true 没有匹配到就是false */@JsonProperty("isDef")private boolean isDef;}

都是师傅学到了。。。。

喜欢我的文章记得点个在看,或者点赞,持续更新中ing…

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 9:05:56

OpenWrt阿里云动态域名解析终极指南:免费实现家庭网络远程访问

想要随时随地访问家中路由器却苦于动态IP变化&#xff1f;阿里云DDNS配合OpenWrt系统为您提供完美解决方案&#xff01;luci-app-aliddns作为专业的动态域名解析工具&#xff0c;让普通用户也能轻松搭建稳定的远程访问环境。 【免费下载链接】luci-app-aliddns OpenWrt/LEDE Lu…

作者头像 李华
网站建设 2026/6/15 10:41:59

如何快速掌握Illustrator智能填充:终极效率指南

如何快速掌握Illustrator智能填充&#xff1a;终极效率指南 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 在平面设计工作中&#xff0c;你是否经常为复杂的图案填充而烦恼&#x…

作者头像 李华
网站建设 2026/6/15 10:36:48

DAIR-V2X车路协同系统深度解析与实战部署

DAIR-V2X车路协同系统深度解析与实战部署 【免费下载链接】DAIR-V2X 项目地址: https://gitcode.com/gh_mirrors/da/DAIR-V2X DAIR-V2X是由清华大学智能产业研究院打造的开源车路协同自动驾驶平台&#xff0c;为行业研究人员提供完整的数据集资源、算法实现方案和系统评…

作者头像 李华
网站建设 2026/6/15 10:44:35

GPT-SoVITS推理速度优化方案:GPU加速实战

GPT-SoVITS推理速度优化方案&#xff1a;GPU加速实战 在语音合成技术飞速发展的今天&#xff0c;个性化语音克隆已不再是实验室里的概念。只需1分钟录音&#xff0c;就能复刻一个人的声音&#xff0c;并用它朗读任意文本——这正是 GPT-SoVITS 带来的现实能力。作为当前开源社区…

作者头像 李华
网站建设 2026/6/15 10:44:32

Axure RP中文界面完美汉化教程:从下载到配置一站式指南

Axure RP中文界面完美汉化教程&#xff1a;从下载到配置一站式指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn …

作者头像 李华
网站建设 2026/6/13 0:09:04

基于MISRA C++的车载软件开发实战案例

车载C为何必须“自我约束”&#xff1f;一个电机控制项目的MISRA实战手记 你有没有想过&#xff0c;为什么在性能越来越强的车载芯片上&#xff0c;工程师反而要主动放弃C里那些炫酷的功能&#xff1f; 比如异常处理、动态内存分配、宏函数、多重继承……这些在普通软件开发中…

作者头像 李华