使用jackson @JsonTypeInfo注释

时间:2015-12-04 20:04:47

标签: java json serialization enums jackson

im尝试在我的应用程序的客户端序列化一个对象(来自Enum),并使用jackson在另一端(服务器端)将其反序列化为同一个Object。我在客户端有这个枚举:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@type")
public enum Request{
    Signup,
    Login
}

使用杰克逊的@jsonTypeInfo注释。

并在服务器端我这样做反序列化对象:

ObjectMapper mapper = new ObjectMapper();
    final JsonNode jsonNode;
    jsonNode = mapper.readTree(json);  //json is the return String from the convertObjectToJson(Request.Signup);

    //i get the error on this line
    String type = jsonNode.get("@type").asText();

正如我在上面的代码中评论的那样,在jsonNode.get("@type").asText()上获取NullException,而json是:[ "Request", "Signup" ]

这是序列化对象的函数:

public static String convertObjectToJson(Object object) throws IOException {
        ObjectWriter objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter();
        String json = objectWriter.writeValueAsString(object);
        return json;
    }

问题出在哪里?

1 个答案:

答案 0 :(得分:2)

默认情况下,Jackson会将java枚举表示为简单字符串,因此您无法反序列化该对象

看看这里,它可以提供帮助:http://www.baeldung.com/jackson-serialize-enums