2015-07-11 105 views
0

我無法獲取發送給pojo的json字符串。將jsonnode轉換爲pojo

com.fasterxml.jackson.databind.JsonMappingException:無法反序列化com.sg.info.Account的情況下進行的[來源START_ARRAY令牌 的:[email protected];行:1,柱:1]

這是JSON

[{"accno":9210255,"type":"Stock- and mutual funds account","default":true,"alias":"Karlsson Joachim"}] 

解析

public void getAccounts() 
    { 
     ObjectMapper mapper = new ObjectMapper(); 
     String resp = Login.getBaseResource().path("accounts").request(Login.getResponsetype()).get(String.class); 

     try { 

      account = mapper.readValue(resp, Account.class); 

POJO

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import com.fasterxml.jackson.annotation.JsonInclude; 
import com.fasterxml.jackson.annotation.JsonProperty; 

@JsonInclude(JsonInclude.Include.NON_NULL) 
@JsonIgnoreProperties(ignoreUnknown=true) 
public class Account { 

    public Account() { 

    } 
    private long accno; 
    private String type; 
    @JsonProperty("default") 
    private String isDefault; 
    private String alias; 


    public long getAccno() { 
     return accno; 
    } 
    public void setAccno(long accno) { 
     this.accno = accno; 
    } 
    public String getType() { 
     return type; 
    } 
    public void setType(String type) { 
     this.type = type; 
    } 
    public String getAlias() { 
     return alias; 
    } 
    public void setAlias(String alias) { 
     this.alias = alias; 
    } 
    @Override 
    public String toString() { 
     return "Account [accno=" + accno + ", type=" + type + ", alias=" 
       + alias + "]"; 
    } 
    public String isDefault() { 
     return isDefault; 
    } 
    @JsonProperty("default") 
    public void setDefault(String isDefault) { 
     this.isDefault = isDefault; 
    } 




} 

回答

1

你的問題是你有JSON是一個數組,並可以有多個帳戶。如果您解析代碼更改爲這樣的事情,它會工作:

ObjectMapper mapper = new ObjectMapper(); 
    String str = "[{\"accno\":9210255,\"type\":\"Stock- and mutual funds account\",\"default\":true,\"alias\":\"Karlsson Joachim\"}]"; 

    JavaType accountListType = mapper.getTypeFactory().constructArrayType(Account.class); 

    Account[] accounts = SharedJsonSerializer.objectMapper().readValue(str, accountListType); 

當然最好是使用集合類型,你可以建立基於mapper.getTypeFactory()你想要的任何類型的

+0

這是有效的,但是對於數組類型,也有一個不太出名的漂亮短小貓:只需將'Account [] .class'作爲類型即可! – StaxMan

+0

這確實有用。但我希望他會用這種方法來創建集合,而不是...恕我直言,總是更好地使用數組集合 –

+0

數組和集合有它們自己的好處,我沒有看到集合本質上更好,尤其是對於簡單數據訪問對象。 – StaxMan