一尘不染

强迫杰克逊反序列化为特定的原始类型

json

我正在使用Jackson 1.8.3将以下域对象序列化和反序列化为JSON

public class Node {
    private String key;
    private Object value;
    private List<Node> children = new ArrayList<Node>();
    /* getters and setters omitted for brevity */
}

然后使用以下代码对对象进行序列化和反序列化

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(destination, rootNode);

然后用

mapper.readValue(destination, Node.class);

对象的原始值为Strings,Doubles,Longs或Booleans。但是,在序列化和反序列化过程中,Jackson将Long值(例如4)转换为Integers。

如何“强制” Jackson将数字非十进制值反序列化为Long而不是Integer?


阅读 189

收藏
2020-07-27

共1个答案

一尘不染

如果将type声明为java.lang.Object,则Jackson将使用“自然”映射,如果值适合32位,则使用Integer。除了自定义处理程序之外,您还必须强制包含类型信息(通过在field
/ getter旁边添加@JsonTypeInfo;或启用所谓的“默认类型”)。

2020-07-27