【问题记录】【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()方法,该方法会收集类的属性信息集合。