使用ObjectMapper().writeValueAsString(data)时谨慎在data类中使用get开头的函数!

在项目开发中,遇到JSON文档生成包含notNull的问题,经排查发现是由于`getNotNull`函数名与Java默认getter方法冲突。解决办法是修改函数名,避免使用以`get`开头,确保`ObjectMapper.writeValueAsString`正确调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题出现

在最近写的一个项目中,需要把一个实体对象以json文档的形式储存。
其中包含这样的一个类:
在这里插入图片描述
一开始使用**ObjectMapper().writeValueAsString(data)**时可以非常正常地生成以下json:
在这里插入图片描述

后面一直在正常进行开发,直到有一天打开了一下生成的json文档,发现里面出现了奇怪的东西:

在这里插入图片描述
是的就是放在第一个的notNull

问题定位

其实整个生成json文档的逻辑非常简单,就是读数据,生成相应的json格式字符串,最后写入文档。
问题只可能出现在生成json格式的位置!通过debug也可以很容易的验证这个结论。
全局搜索notnull发现只有一个函数包括了这两个单词:
在这里插入图片描述

问题解决

当时第一反应是getNotNull这个函数名是不是和其他函数名冲突了,于是我把函数名改为了getOneList,结果输出的json文档变成了这样:

在这里插入图片描述
这样的话问题就很显然了,应该是**ObjectMapper().writeValueAsString(data)**在生成json格式的字符时会调用data类中全部的getter方法。

所以解决方法就是把函数名改掉,不使用get开头

Java中,如果你有一个包含区域数据的文件(如JSON、CSV或XML),通常需要解析这个数据并将其转换成中文文本。这里是一个简单的例子,假设我们使用的是JSON格式,你可以使用Jackson库来进行解析,并用Java字符串替换相应的英文区域名称: ```java import com.fasterxml.jackson.databind.ObjectMapper; // 假设你的区域数据存储在一个名为"element-china-area-data.json"的文件中 String jsonData =.readFile("element-china-area-data.json"); // 读取文件内容 // 创建ObjectMapper实例 ObjectMapper mapper = new ObjectMapper(); // 将JSON转换为Java对象(例如HashMap) Map<String, String> areasInJson = mapper.readValue(jsonData, HashMap.class); // 遍历地图,将英文名称替换为中文 for (Map.Entry<String, String> entry : areasInJson.entrySet()) { String areaKey = entry.getKey(); // 英文区域名 String chineseName = getChineseNameForArea(areaKey); // 获取对应的中文名称 entry.setValue(chineseName); } // 写回更新后的JSON String updatedJson = mapper.writeValueAsString(areasInJson); writeFile(updatedJson, "element-china-area-data-chinese.json"); // 具体获取中文名称的函数getChineseNameForArea()你需要根据实际的数据结构填充 private String getChineseNameForArea(String英文名) { // 这里假设你已经有了一个中文区域映射的Map或者数据库查询 // 例如: Map<String, String> chineseMappings = ...; return chineseMappings.get(英文名); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值