我有这样的json
[
{
"name" : "New York",
"number" : "732921",
"center" : {
"latitude" : 38.895111,
"longitude" : -77.036667
}
},
{
"name" : "San Francisco",
"number" : "298732",
"center" : {
"latitude" : 37.783333,
"longitude" : -122.416667
}
} ]
使用http://www.jsonschema2pojo.org/我在pojo类下面生成的
-----------------------------------com.example.Center.java-----------------------------------
package com.example;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.annotate.JsonAnyGetter;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonPropertyOrder({
"latitude",
"longitude"
})
public class Center implements Serializable
{
@JsonProperty("latitude")
private Double latitude;
@JsonProperty("longitude")
private Double longitude;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private final static long serialVersionUID = -7995395877218484665L;
@JsonProperty("latitude")
public Double getLatitude() {
return latitude;
}
@JsonProperty("latitude")
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
@JsonProperty("longitude")
public Double getLongitude() {
return longitude;
}
@JsonProperty("longitude")
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
-----------------------------------com.example.Location.java-----------------------------------
package com.example;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.annotate.JsonAnyGetter;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.annotate.JsonPropertyOrder;
import org.codehaus.jackson.map.annotate.JsonSerialize;
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@JsonPropertyOrder({
"name",
"number",
"center"
})
public class Location implements Serializable
{
@JsonProperty("name")
private String name;
@JsonProperty("number")
private String number;
@JsonProperty("center")
private Center center;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
private final static long serialVersionUID = 3575741942846550732L;
@JsonProperty("name")
public String getName() {
return name;
}
@JsonProperty("name")
public void setName(String name) {
this.name = name;
}
@JsonProperty("number")
public String getNumber() {
return number;
}
@JsonProperty("number")
public void setNumber(String number) {
this.number = number;
}
@JsonProperty("center")
public Center getCenter() {
return center;
}
@JsonProperty("center")
public void setCenter(Center center) {
this.center = center;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
当我从其他客户发出具有上述相同工资负荷的电话时 我遇到错误
Can not deserialize instance of com.example.Location out of START_ARRAY token
at [Source: io.undertow.servlet.spec.ServletInputStreamImpl@ef77e4a; line: 1, column: 1]
我的Rest终点看起来像这样(ResponseObject是我的自定义响应)。
@POST
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseObject create(final Location Location) {
ResponseObject responseObject = new ResponseObject();
responseObject.setStatus("200");
return responseObject;
}
我在这里想念什么? 我当时正在查看DeserializationFeature,但不确定如何设置Pojo级别?
在这种情况下,我没有使用ObjectReader
有什么帮助吗?
更新
通过列出位置,我解决了这个问题。 但是,如果JSON没有像下面这样的统一数据,我将得到每个位置都填充一个对象的位置列表。我的意思是第一个位置填充有包含名称,数字的对象,第二个位置对象填充有xxx对象(另一个对象为null)。 有什么办法可以为下面的json类型绑定单个对象?
[
{
"name" : "New York",
"number" : "732921",
"center" : {
"latitude" : 38.895111,
"longitude" : -77.036667
}
},
{
"xxx" : [
"yyy" : "zzz"
]
} ]
]
答案 0 :(得分:1)
您将数组作为输入传递,但将位置传递给单个对象。