2016-11-04 11 views
1

私はJavaオブジェクトに次のJSONをdeserialiseしようとしていますが、下記を参照しなさいACCESSLEVELプロパティを認識できないことを不平を言っている:ジャクソンDeserialising:com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:

{ 
    "Role1": [ 
     { 
      "path": "/1_order/1_general/customer.comp.json", 
      "accesslevel": "ENABLED" 
     }, 
     { 
      "path": "/1_order/1_general/CustomerComponent.json", 
      "accesslevel": "DISABLED" 
     }, 
     { 
      "path": "/2_help/DummyComponent.json", 
      "accesslevel": "ENABLED" 
     } 
    ] 
} 

Javaオブジェクトは、次のようになります。

public class AccessLevelConfigWrapper { 

    HashMap<String, List<AccessLevelDetails>> listOfRoles; 

    public AccessLevelConfigWrapper() { 

    } 

    public HashMap<String, List<AccessLevelDetails>> getListOfRoles() { 
     return listOfRoles; 
    } 

    public void setListOfRoles(HashMap<String, List<AccessLevelDetails>> listOfRoles) { 
     this.listOfRoles = listOfRoles; 
    } 

} 

AccessLevelDetails:

public class AccessLevelDetails { 

    @JsonProperty 
    private String accessLevel; 
    @JsonProperty 
    private String path; 

    public String getAccessLevel() { 
     return accessLevel; 
    } 

    public void setAccessLevel(String accessLevel) { 
     this.accessLevel = accessLevel; 
    } 

    public String getPath() { 
     return path; 
    } 

    public void setPath(String path) { 
     this.path = path; 
    } 

} 

これは私がそれをdeserialiseしようとしている方法です:

TypeReference<HashMap<String, List<AccessLevelDetails>>> typeRef = new TypeReference<HashMap<String, List<AccessLevelDetails>>>() { 
     }; 
     this.accessLevelConfigWrapper = new AccessLevelConfigWrapper(); 
     this.accessLevelConfigWrapper.setListOfRoles(
       (new ObjectMapper().readValue(JSONObject.valueToString(this.parentConfigWithPaths), typeRef))); 

と私は例外次取得しています:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "accesslevel" (class com.gatcbiotech.blueberry.gateway.authorization.model.AccessLevelDetails), not marked as ignorable (2 known properties: "accessLevel", "path"]) 
at [Source: {"CN=it-soft,CN=Groups,DC=intern,DC=gatc-biotech,DC=com":[{"path":"/1_order/1_general/customer.comp.json","accesslevel":"ENABLED"},{"path":"/1_order/1_general/CustomerComponent.json","accesslevel":"DISABLED"},{"path":"/2_help/DummyComponent.json","accesslevel":"ENABLED"}]}; line: 1, column: 122] (through reference chain: java.util.HashMap["CN=it-soft,CN=Groups,DC=intern,DC=gatc-biotech,DC=com"]->java.util.ArrayList[0]->com.gatcbiotech.blueberry.gateway.authorization.model.AccessLevelDetails["accesslevel"]) 
    at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51) 
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:744) 
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:915) 
    at .... 
+1

あなたはタイプミス( 'accessLevel'対' accesslevel')があります。 JSONには 'accesslevel'がありますが、注釈では' accessLevel'を設定します。 – uthark

+0

@uthark:私は信じません、私は解決策を考え出す1時間を過ごしました。ありがとう男 – Roxy

+0

それが動作する場合は、私の答えを解決策としてマークしてください。 – uthark

答えて

1

タイプミス(accesslevelaccessLevel)を修正してください。 JSONにはaccesslevelがありますが、注釈にはaccessLevelと設定されています。 JSONキーの解析時にjacksonが大文字と小文字を区別するため、一致する必要があります。