2016-10-25 5 views
1
deserialize

Ich arbeite mit jackson-core-2.8.3 und ich habe eine json, die Element in mehreren Fällen zur Verfügung gestellt hat. Ich möchte es meiner Klasse zuordnen, aber ich kann das nicht, weil ich in meiner Klasse nur eine Art von PropertyNamingStratergy haben kann.Wie mehrere Fälle mit Jackson

Beispiel Json: -

{"tableKey": "1","not_allowed_pwd": 10} 

kann es eine andere json wie

{"tableKey": "1","notAllowedPwd": 10} 

ClassToMap: -

class MyClass { 
public String tableKey; 
public Integer notAllowedPwd; 
} 

ObjectMapper Code: -

ObjectMapperobjectMapper=new ObjectMapper(); 
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false); 
objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,true); 
objectMapper.setSerializationInclusion(Include.NON_NULL); 
objectMapper.setVisibility(PropertyAccessor.ALL,Visibility.NONE); 
objectMapper.setVisibility(PropertyAccessor.FIELD,Visibility.ANY); 
MyClass obj = objectMapper.readValue(s, MyClass.class); 

Ich finde nirgendwo eine Lösung. Es wird gut sein, wenn jemand helfen kann, wie es weitergeht.

+0

Werfen Sie einen Blick auf http://stackoverflow.com/questions/12583638/when-is-the-jsonproperty-property-used-and-what-isit-used-for –

+0

Dieser Link könnte Ihnen helfen http://websystique.com/java/json/jackson-json-annotations-example/ –

+0

Das Problem ist, dass JSON Call to Call variieren kann, so kann Snakecase Camelcase Format sein – Swaraj

Antwort

0

Verwenden Sie die jackson-Annotations-Bibliothek und fügen Sie @JsonProperty wie folgt hinzu.

class MyClass { 
    public String tableKey; 
    @JsonProperty("not_allowed_pwd") 
    public Integer notAllowedPwd; 
} 
+0

Danke, aber ich habe andere Anforderungen, ich habe die Frage bearbeitet. – Swaraj

+0

In diesem Fall müssten Sie entweder 1) auf zwei verschiedene Klassen mappen und manuell kombinieren, oder 2) das Schema Ihres jsons korrigieren. Ich glaube nicht, dass sich ändernde/inkonsistente Eigenschaftsnamen mühelos gemappt werden können. – kjsebastian

+0

Gibt es eine Klasse, die während der readValue-Methode verwendet wird, wo ich den Eigenschaftsnamen in Camelcase ändern kann, indem ich meine Klasse benutze – Swaraj

0

Sie können für den zweiten Feldnamen eine zweite Setter mit einem @JsonProperty Annotation:

class MyClass { 
    private String tableKey; 
    private Integer notAllowedPwd; 

    public String getTableKey() { 
     return tableKey; 
    } 

    public void setTableKey(String tableKey) { 
     this.tableKey = tableKey; 
    } 

    public Integer getNotAllowedPwd() { 
     return notAllowedPwd; 
    } 

    public void setNotAllowedPwd(Integer notAllowedPwd) { 
     this.notAllowedPwd = notAllowedPwd; 
    } 

    @JsonProperty("not_allowed_pwd") 
    public void setNotAllowedPwd2(Integer notAllowedPwd) { 
     this.notAllowedPwd = notAllowedPwd; 
    } 
} 

berücksichtigen, dass, wenn die beiden Objekte im json vorhanden sind, werden sie überschrieben.