我正在尝试将以下Json数组响应解组到RestTemplate中的pojos集合。
[{ "client":{ "id": 6364, "name": "7Seven7 Insurance Inc", "email": "donna@7seven7ins.com", "currency": {"name":"United States of America, Dollars","symbol":"$"}, "address": "941 Elm Ave. #5 ", "city": "Long Beach", "province": "CA", "zip_code": "90813", "country": "United States", "full_address_with_comma": "941 Elm Ave. #5, Long Beach, CA, 90813, United States", "phone": "562-556-4035", "fax":"562-381-7500", "custom_field_name": "listed", "custom_field_value": "false", "created_at": "2010-07-18T00:08:10Z", "updated_at": "2010-07-21T11:04:58Z", } }, { "client":{ "id":6365, "name": "Affinity", "email":"CGregory@affinitygroup.com", "address":"2575 Vista Del Mar ", "city":"Ventura", "province":"California", "zip_code":"93001", "country":"United States", "full_address_with_comma":"2575 Vista Del Mar, Ventura, California, 93001, United States", "phone":"(270) 901-2913", "fax":null, "currency":{"name":"United States of America, Dollars","symbol":"$"}, "custom_field_name":null, "custom_field_value":null "created_at":"2010-07-18T00:08:10Z", "updated_at":"2010-07-18T00:08:10Z", } }]
我创建了一个对应的Java Pojo类
public class Client { @JsonProperty("id") private String id; @JsonProperty("name") private String name; @JsonProperty("currency") private String currency; @JsonProperty("address") private String address; @JsonProperty("city") private String city; @JsonProperty("province") private String province; @JsonProperty("zip_code") private String zip_code; @JsonProperty("country") private String country; @JsonProperty("full_address_with_comma") private String full_address_with_comma; @JsonProperty("phone") private String phone; @JsonProperty("fax") private String fax; @JsonProperty("custom_field_name") private String custom_field_name; @JsonProperty("custom_field_value") private String custom_field_value; @JsonProperty("created_at") private String created_at; @JsonProperty("updated_at") private String updated_at; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCurrency() { return currency; } public void setCurrency(String currency) { this.currency = currency; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getZip_code() { return zip_code; } public void setZip_code(String zip_code) { this.zip_code = zip_code; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getFull_address_with_comma() { return full_address_with_comma; } public void setFull_address_with_comma(String full_address_with_comma) { this.full_address_with_comma = full_address_with_comma; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getFax() { return fax; } public void setFax(String fax) { this.fax = fax; } public String getCustom_field_name() { return custom_field_name; } public void setCustom_field_name(String custom_field_name) { this.custom_field_name = custom_field_name; } public String getCustom_field_value() { return custom_field_value; } public void setCustom_field_value(String custom_field_value) { this.custom_field_value = custom_field_value; } public String getCreated_at() { return created_at; } public void setCreated_at(String created_at) { this.created_at = created_at; } public String getUpdated_at() { return updated_at; } public void setUpdated_at(String updated_at) { this.updated_at = updated_at; }
}
我正在使用RestTemplate,但是我有一个带有空属性值的客户端数组。
Client[] clients= restTemplate.getForObject(requestUrl, Client[].class);
您的大多数POJO字段都是类型,String但JSON的值中没有双引号("")。您的JSON应该如下所示才能有效:
String
""
[ { "client": { "id": "6364", "name": "7Seven7 Insurance Inc", "email": "donna@7seven7ins.com", "currency": { "name": "United States of America, Dollars", "symbol": "$" }, "address": "941 Elm Ave. #5 ", "city": "Long Beach", "province": "CA", "zip_code": "90813", "country": "United States", "full_address_with_comma": "941 Elm Ave. #5, Long Beach, CA, 90813, United States", "phone": "562-556-4035", "fax": "562-381-7500", "custom_field_name": "listed", "custom_field_value": "false", "created_at": "2010-07-18T00:08:10Z", "updated_at": "2010-07-21T11:04:58Z" } }, { "client": { "id": "6365", "name": "Affinity", "email": "CGregory@affinitygroup.com", "address": "2575 Vista Del Mar ", "city": "Ventura", "province": "California", "zip_code": "93001", "country": "United States", "full_address_with_comma": "2575 Vista Del Mar, Ventura, California, 93001, United States", "phone": "(270) 901-2913", "fax": "null", "currency": { "name": "United States of America, Dollars", "symbol": "$" }, "custom_field_name": "null", "custom_field_value": "null", "created_at": "2010-07-18T00:08:10Z", "updated_at": "2010-07-18T00:08:10Z" } } ]
另外,您的JSON有一个email字段,但您的ClientPOJO没有email字段,并且您currency在POJO中声明的字段不是String,它是一个具有两个字段的对象,因此您的ClientPOJO应该为:
email
Client
currency
public class Client { private String id; private String name; private String email; private Currency currency; private String address; private String city; private String province; private String zip_code; private String country; private String full_address_with_comma; private String phone; private String fax; private String custom_field_name; private String custom_field_value; private String created_at; private String updated_at; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Currency getCurrency() { return currency; } public void setCurrency(Currency currency) { this.currency = currency; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getZip_code() { return zip_code; } public void setZip_code(String zip_code) { this.zip_code = zip_code; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getFull_address_with_comma() { return full_address_with_comma; } public void setFull_address_with_comma(String full_address_with_comma) { this.full_address_with_comma = full_address_with_comma; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getFax() { return fax; } public void setFax(String fax) { this.fax = fax; } public String getCustom_field_name() { return custom_field_name; } public void setCustom_field_name(String custom_field_name) { this.custom_field_name = custom_field_name; } public String getCustom_field_value() { return custom_field_value; } public void setCustom_field_value(String custom_field_value) { this.custom_field_value = custom_field_value; } public String getCreated_at() { return created_at; } public void setCreated_at(String created_at) { this.created_at = created_at; } public String getUpdated_at() { return updated_at; } public void setUpdated_at(String updated_at) { this.updated_at = updated_at; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
有一个新Currency对象:
Currency
public class Currency { private String name; private String symbol; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSymbol() { return symbol; } public void setSymbol(String symbol) { this.symbol = symbol; } }
另一方面,您正在尝试反序列化Client对象数组,但是JSON是对象数组,其中每个对象都包含一个Client对象,因此需要包装它:
public class Cliente { private Client client; public Client getClient() { return client; } public void setClient(Client client) { this.client = client; } }
然后可以使用restTemplate或使用反序列化JSON ObjectMapper。 带有restTemplate:
restTemplate
ObjectMapper
Cliente[] clients= restTemplate.getForObject(requestUrl, Cliente[].class);
使用ObjectMapper(杰克逊的方法genericMessageConverter完全相同,它使用ObjectMapper如下):
genericMessageConverter
Cliente[] clientes= mapper.readValue(jsonStr, Cliente[].class);
另一件事是,@JsonProperty如果JSON字段在JSON和POJO中具有相同的名称,则在POJO中不需要注释。
@JsonProperty