我收到JSON
:
[{"LocationId":1,"LocationCode":"Area A"},{"LocationId":2,"LocationCode":"Area B"}]
使用spring在Android应用程序中使用web api,但无法映射到POJO:
@JsonIgnoreProperties(ignoreUnknown = true)
public class DataLocation {
private String LocationId;
private String LocationCode;
public String getLocationId(){
return LocationId;
}
public String getLocationCode(){
return LocationCode;
}
}
这是获得json
的代码:
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
ResponseEntity<DataLocation[]> forNow = restTemplate.getForEntity(url, DataLocation[].class);
任何人都知道为什么它没有映射?
修改
此link有助于创建pojo
,可以通过json
转换为spring
。因此,结果POJO
必须如下所示:
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"LocationId",
"LocationCode"
})
public class DataLocation {
@JsonProperty("LocationId")
private Integer locationId;
@JsonProperty("LocationCode")
private String locationCode;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("LocationId")
public Integer getLocationId() {
return locationId;
}
@JsonProperty("LocationId")
public void setLocationId(Integer locationId) {
this.locationId = locationId;
}
@JsonProperty("LocationCode")
public String getLocationCode() {
return locationCode;
}
@JsonProperty("LocationCode")
public void setLocationCode(String locationCode) {
this.locationCode = locationCode;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
答案 0 :(得分:1)
如果你很好奇,原因可能是因为将字段的名称大写这样是一种非常糟糕的做法。
通常,如果提供的JSON是标准的camelCase,kebab-case,snake_case,Spring将能够处理这些映射。
对于奇怪的情况,它不能@JsonProperty是一个非常方便的工具,特别是当你需要在setter中转换奇数值时等。