2017-06-15 11 views
0

私は次のMediaPlayerStateクラスを持っており、そのインスタンスはObjectタイプとして取得しました。私はこのクラスインスタンスをシリアライズし、返されたstateStringはそのクラスパスを指す@classというキーを持っています。ジャクソン - @classのキーがあり、その値はクラスのフルパスです - 何らかの理由がありますか?

私の質問は何ですかこれは@classに使用されていますか?それはstateStringを試して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); 

答えて

0

2つのObjectMapperがあることに気付きました。

  1. jackson-mapper:org.codehaus.jackson.map.ObjectMapper;
  2. ジャクソン-データバインド:私は第一1を使用する場合はcom.fasterxml.jackson.databind.ObjectMapper

問題のケースでは、私はシリアル化された文字列に@classを取り除くことができる午前、2のObjectMapperを使用しました。

関連する問題