2016-12-23 1 views
0

JSONにオブジェクトをマーシャリングするためにJackson Mapperオブジェクトを使用しています。それは素晴らしいですが、時にはマーシャルされるオブジェクトのプロパティではない特定のJSONを含める必要があります。 "extraJSON"のようなStringプロパティを作成してJSONコンテンツをそこに置くと、そのオブジェクトがマーシャリングされるときにextraJSONがエスケープされるので、JSONの中にある種類のJSONが終了します。 タイプJsonObject(Java 8 JSON)のプロパティを作成しようとしましたが、正しくマーシャリングされていません。Jackson Mapperによってシリアル化されるオブジェクトにJSONコンテンツを含めるための最良のアプローチ

これを解決する方法はありますか?これまではローカルクラスを使用しています(これは、その場で作成し、 "Object"タイプのプロパティを使用します)。これは動作しますが、醜い回避策です。

+0

@ JsonRawValueを試しましたか? –

答えて

0

@JsonRawValueを使用して、エスケープされたJSON文字列を含む属性ではなく、JSONとしてクラスメンバーをマーシャリングする、非常に基本的な例を次に示します。あなたのシナリオに当てはまるかどうかは分かりませんが、助けてくれるといいでしょう

package com.spring.jackson.rawjson; 

import static org.junit.Assert.assertEquals; 

import com.fasterxml.jackson.annotation.JsonProperty; 
import com.fasterxml.jackson.annotation.JsonRawValue; 
import com.fasterxml.jackson.databind.ObjectMapper; 
import org.junit.Test; 

public class RawJsonTest { 

    public static class PojoWithRawJsonMember { 

     private final String member1; 
     private final String member2; 
     private final String rawJsonMember1; 

     public PojoWithRawJsonMember(String member1, String member2, String rawJsonMember1) { 
      this.member1 = member1; 
      this.member2 = member2; 
      this.rawJsonMember1 = rawJsonMember1; 
     } 

     @JsonProperty("member1") 
     public String getMember1() { 
      return member1; 
     } 

     @JsonProperty("member2") 
     public String getMember2() { 
      return member2; 
     } 

     @JsonRawValue 
     public String getRawJsonMember1() { 
      return rawJsonMember1; 
     } 
    } 

    @Test 
    public void jsonRaw_shouldMarshalRawJson() throws Exception { 
     ObjectMapper mapper = new ObjectMapper(); 
     PojoWithRawJsonMember thingToMarshal = new PojoWithRawJsonMember("value1", "value2", "{\"key\":\"value\"}"); 
     String marshalled = mapper.writeValueAsString(thingToMarshal); 
     assertEquals("{\"rawJsonMember1\":{\"key\":\"value\"},\"member1\":\"value1\",\"member2\":\"value2\"}", 
       marshalled); 
    } 
} 

@JsonRawValueは、シリアル化するときに機能します。 JavaDocsからの私の理解では、逆シリアル化には適用されません。

関連する問題