【问题记录】【SpringBoot】【Jackson】SpringBoot返回的json结果,某个属性有值结果却没有
1 问题描述
代码如下: @Data static class Demo { @JsonProperty(index = 1) private String menu; @JsonProperty(index = 1) private String info; } @SneakyThrows public static void main(String[] args) { Demo resDto = new Demo(); resDto.setMenu("222"); resDto.setInfo("111"); ObjectMapper objectMapper = new ObjectMapper(); String str = objectMapper.writeValueAsString(resDto); //fastjson转换后的结果 System.out.println("fastjson=" + JSONObject.toJSONString(resDto)); //springmvc默认json转换的结果 System.out.println("objectMapper="+str); }
SpringMVC默认的序列化是Jackson,字段menu属性有值,但是输出的结果却没有!!!
因为之前另一个项目我记得我就是直接复制上一个字段的信息,改一下字段名就没问题,不知道这个为什么出不来。
2 解决办法
其实就是,@JsonProperty(index = 1)这个属性引起的问题,和Jackson版本的问题导致的,原来的是2.9.0版本,出问题的这个版本是2.12.5;
所以1、要么把属性的Index都设置不一样或者不设置Index即可 2、或者更换Jackson为低版本即可。
3 Jackson版本源码
主要是看POJOPropertiesCollector这个类的collectAll()方法,该方法会收集类的属性信息集合。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了