杰克逊 - 有一个@class的关键,它的价值是班级的完整路径 - 这有什么理由吗?

时间:2017-06-15 18:37:31

标签: json jackson

我有以下MediaPlayerState类,我以Object类型获取了它的实例。我序列化了这个类实例,返回的stateString有一个@class的键,指向它的类路径。

我的问题是@class用于什么?是否可以使用stateString正确解除序列化以更正类类型,而不像Try 1中那样提供MediaPlayerState.class

Class MediaPlayerState() {
    private String client;
    private String playbackState;
}

// Jackson Serialize
Object value = method.invoke(this, null); // this returned MediaPlayerState
map.put(key, objectMapper.writeValueAsString(value));

stateString = {"@class":"com.jessica.mediaplayer.MediaPlayerState",
               "playbackState":null,
               "client":null}

// Jackson Deserialize try 1 -- able to get correct MediaPlayerState
MediaPlayerState state = objectMapper.readValue(stateString, MediaPlayerState.class);

// Jackson Deserialize try 2 -- incorrect
Object state = objectMapper.readValue(stateString, Object.class);

1 个答案:

答案 0 :(得分:0)

我注意到有两个ObjectMapper。

  1. jackson-mapper:org.codehaus.jackson.map.ObjectMapper;
  2. jackson-databind:com.fasterxml.jackson.databind.ObjectMapper
  3. 对于问题中的情况,我使用了2的ObjectMapper。如果我使用第一个,我可以摆脱序列化字符串中的@class