使用Jackson转换POJO为JSON字符串时的属性缺失问题求助
解决Jackson序列化POJO时输出类名且属性不全的问题
看起来你遇到的问题主要有两个:一是序列化结果里莫名出现了POJO的类名,二是POJO的属性没有被完整输出。下面我给你拆解一下原因和对应的解决办法:
1. 为什么会输出类名?
这大概率是因为你的ObjectMapper开启了默认类型序列化(Default Typing),Jackson会自动把对象的类型信息写入JSON,就出现了"packagename.RootNode"这种内容。解决办法很简单,关闭这个特性:
ObjectMapper objectMapper = new ObjectMapper(); // 关闭默认类型序列化,移除类名输出 objectMapper.disableDefaultTyping();
2. 为什么属性没全输出?
Jackson默认只会序列化有public getter方法的属性,或者被@JsonProperty标记的字段。如果你的POJO属性是private且没有对应的getter,Jackson就会忽略它们。你有两种解决方式:
方式一:给所有需要序列化的属性添加getter方法
比如你的RootNode类:
public class RootNode { private String name; private int id; private String type; private String nNode; private double posX; private double posY; // 为每个属性添加getter public String getName() { return name; } public int getId() { return id; } public String getType() { return type; } public String getNNode() { return nNode; } public double getPosX() { return posX; } public double getPosY() { return posY; } }
方式二:配置ObjectMapper直接访问私有字段
如果你不想写一堆getter,可以让Jackson直接读取私有字段,不需要依赖getter:
ObjectMapper objectMapper = new ObjectMapper(); objectMapper.disableDefaultTyping(); // 设置允许访问所有字段(包括private) objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
3. 关于nNode的嵌套对象序列化
看你的期望输出里nNode是一个JSON字符串格式的内容,如果nNode本身是一个Java对象,你需要把它先序列化为字符串再输出。可以在POJO里自定义一个getter来处理:
public class RootNode { // 假设这是嵌套的原始对象 private PersonInfo personInfo; // 自定义getter,把嵌套对象转为JSON字符串 @JsonProperty("nNode") public String getNNodeAsString() throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.writeValueAsString(personInfo); } // 其他属性和方法... }
完整的示例代码
把这些整合起来,你的generateJSONString方法可以改成这样:
private String generateJSONString(List<Node> nodes) throws JsonProcessingException { ObjectMapper objectMapper = new ObjectMapper(); // 关闭默认类型,移除类名 objectMapper.disableDefaultTyping(); // 允许访问私有字段 objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); return objectMapper.writeValueAsString(nodes); }
这样调整后,应该就能得到你期望的包含所有属性的JSON结果了。
内容的提问来源于stack exchange,提问作者anarche
相关产品推荐
相关产品推荐

