2017-01-22 5 views
0

JSONをJavaオブジェクトにマップしようとしています。その逆もあります。そうすることで、クラスの私の未知のパラメータはjava.util.Map@JsonAnySetterメソッドにマップされます。しかし、Javaオブジェクトからjsonを取り戻す時に、私は間違った出力を得ています。私はfasterxmlライブラリを使用しています。ここでJavaオブジェクトをJSONにマッピングするのが難しい

は私のJavaオブジェクトです:

import java.util.HashMap; 
import java.util.Map; 

import com.fasterxml.jackson.annotation.JsonAnyGetter; 
import com.fasterxml.jackson.annotation.JsonAnySetter; 
import com.fasterxml.jackson.annotation.JsonInclude; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
public class TestClass { 
    private String context_id; 
    private Map<String, String> properties = new HashMap<>(); 

    public String getContext_id() { 
     return context_id; 
    } 
    public void setContext_id(String context_id) { 
     this.context_id = context_id; 
    } 
    @JsonAnySetter 
    public void set(String fieldName, String value){ 
     this.properties.put(fieldName, value); 
    } 
    @JsonAnyGetter 
    public Map<String, String> any() { 
     return this.properties; 
    } 
    public String get(String fieldName){ 
     return this.properties.get(fieldName); 
    } 
} 

と私はcom.fasterxml.jackson.databind.ObjectMapperでJavaオブジェクトにマッピングするために提供していますJSONは次のとおりです。

{ 
    "context_id": "14", 
    "io": "odp" 
} 

と私は戻ってJavaからJSONを取得しようとすると、オブジェクト私はこのようになっています:

{ 
      "context_id": "14", 
      "properties" : { 
        "io": "odp" 
      }, 
      "io": "odp" 
} 

しかし、私はそれを得るように戻ってください:

{ 
     "context_id": "14", 
     "properties" : { 
       "io": "odp" 
     } 
} 

私には分かりません。

+0

実際に期待されている出力を意味しましたか、入力と同じように出力しますか? –

+0

はい、そうです。私の予想出力は - '{ "CONTEXT_ID": "14"、 "プロパティ":{ "IO": "ODP" } }私はgetメソッドを削除した場合、' –

答えて

0

get-methodを削除してください。すべて正常であるはずです。代わりに、ゲッターに@JsonIgnoreを設定することもできます( Only using @JsonIgnore during serialization, but not deserializationを参照)。

+0

私がすることはできませんマップに格納されている未知のパラメータを取得し、私がしたい、このように私の出力 - '{ "CONTEXT_ID": "14"、 "プロパティ":{ "IO": "ODP" } }' これは - '{ " context_id ":" 14 "、 "プロパティ ":{ " io ":" odp " }、 "io": "odp" } –

+0

確かに。あなたは上記の答えを使って試しましたか? – triplem

+0

私の電話番号は '{" context_id ":" 12 "、" yio ":" odjp "}' と期待していませんでした。 –

0

ご協力いただきありがとうございます。私は問題を解決しました。 1.私はこの部分を削除した

@JsonAnyGetter 
public Map<String, String> any() { 
    return properties; 
} 
特性は次のようにマップの
  • 正常ゲッターを追加

      は -

      パブリックマップのgetProperties(){ 戻り特性。 }

  • 関連する問題