2016-12-09 26 views
0

だから、私が持っている設定として正しくシリアル化されたJSONを書いているジャクソン - HashMapのようにデシリアライズMap実装

.defaultTyping(NON_FINAL) 

"headers": [ 
     "org.springframework.messaging.MessageHeaders", 
     { 

さて、問題はMessageHeadersクラスは、地図を実施しているということですが、また、putメソッドをオーバーライドして例外をスローします。それは実際には地図があるため(

"headers": [ 
     "java.util.HashMap", 
     { 

または明示的にHashMapのようMessageHeadersをデシリアライズすることができるようにする

を:これを適切にデシリアライズするために、私はそう、HashMapのようにこれをシリアル化できるようにするeaither必要があります。もう1つの質問は、HashMapとしてMapを実装するObjectをシリアライズする方法、またはObject実装マップをHashMapとしてデシリアライズする方法です。

+1

@ JsonDeserialize(as = java.util.HashMap.class)注釈を試しましたか? –

+0

はい、私はしました。スローされた例外は、MessageHeadersをHashMapとして直列化解除できないことです。 MessageHeadersはMapインターフェイスのみを実装します。内部的には、この値を格納するために使用される最終的なMapヘッダープロパティーを持っています。 –

+0

また、@ JsonSerialize(= Map.classとして)を試しましたが、NON_FINALの既定の型入力が優先されると仮定します –

答えて

0

Ok、私はカスタムシリアライザでこれを行う方法を見つけました(トリックはシリアライザにjava実際のクラス名の代わりに.util.HashMap):

public class MessageHeadersJsonSerializer extends JsonSerializer<MessageHeaders>{ 
    @Override 
    public void serializeWithType(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers, TypeSerializer typeSer) throws IOException { 
     typeSer.writeTypePrefixForObject(value, gen, HashMap.class); 
     serialize(value, gen, serializers); 
     typeSer.writeTypeSuffixForObject(value, gen); 
    } 

    @Override 
    public void serialize(MessageHeaders value, JsonGenerator gen, SerializerProvider serializers) throws IOException { 
     for(Map.Entry<String, Object> entry : value.entrySet()){ 
      gen.writeFieldName(entry.getKey()); 
      gen.writeObject(entry.getValue()); 
     } 
    } 
} 

そしてちょうどミックスインとしてそれを登録:

public abstract class GenericMessageMixIn<T> { 
    @JsonCreator 
    public GenericMessageMixIn(
      @JsonProperty("payload") T payload, 
      @JsonProperty("headers") Map<String, Object> headers 
    ){} 
} 

そして最後にすべてがOK作品:私はHashMapのようにそれをデシリアライズしてい

@JsonSerialize(using = MessageHeadersJsonSerializer.class) 
public abstract class MessageHeadersMixIn {} 

そして、親オブジェクトに!

関連する問題