2016-11-04 128 views
1

我想deserialise以下JSON转换成Java对象,但抱怨它不能够识别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' vs'accesslevel')。 JSON具有'accesslevel',但在注释中设置'accessLevel'。 – uthark

+0

@uthark:我不相信,我花了1个小时找出解决方案。谢谢你 – Roxy

+0

如果它有效,那么将我的答案标记为解决方案。 – uthark

回答

1

修复一个错字(accessLevel VS accesslevel)。 JSON有accesslevel,但在注释中设置accessLevel。它们应该匹配,因为杰克逊在解析JSON密钥时区分大小写。