2016-11-17 20 views
1

を返す私はreceivedMessageが(以前JSONから解析)のHashMapであり、様々なタイプのフィールドを含むジャクソンObjectMapper解析は、すべてのフィールド= NULL

Object parsedMessage = objectMapper.convertValue(receivedMessage, destinationClass); 

を使用してPOJOにハッシュマップデータを解析しようとしています - 整数、ブール値、文字列、LinkedHashMap。

それはHashMapのキーで見つかったフィールドの一部、キー(大文字と小文字を区別)とまったく同じ名前を持つが含まれているように、私はdestinationClassを定義しています。

命令は例外なく実行されますが、parsedMessageのすべてのフィールドはnullです。理由は何でしょうか?同様の指示は、コードの他の場所でうまく動作します。

+0

あなたのコードとPOJOクラスはどちらですか? – Jerry06

+0

HashMapの単純な "Id:1"キーと値のペアは、オブジェクトフィールドとしてInteger Id = 1に変換されません@ Jerry06 –

+0

私はそれがjackson 2.4 – Jerry06

答えて

3

私はそれを解決しました。

destinationClass中にかかわらず、どのようにあなたのJavaフィールド、めくりが命名され、(少なくとも、デフォルトでは)ジャクソンは、それがlowerCamelCaseで命名されていることを前提としています。 ハッシュマップに "YourField"があり、POJOの "YourField"が同じ場合は、の開始からlowerCamelCaseを使用しないと、は機能しません! (シリアル化された.NET JSONを解析すると、UpperCamelCaseになります)。

ジャクソンは、あなたのPOJOの "YourField"の名前が "yourField"と一致すると仮定しているためです!

あなたのHashMapのキーがlowerCamelCaseする必要があります。

はどちらか、この問題を解決するには。あなたはPOJOでannottaionsを使用することができます

OR

明確にするため、大文字と小文字を区別しない動作をするマッパー

ObjectMapper om = new ObjectMapper(); 
om.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); 
return om; 

OR

を作成します(https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations

@JsonProperty("YourField") 
    private String YourField; 

注:もし何か「寛容な読者」()をやりたい)を部分解析すると、クラスベースの注釈@JsonIgnoreProperties(ignoreUnknown = true) が見つかるため、記述していないフィールドを解析しようとすると例外が発生しません。

関連する問題