Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法反序列化启动\u数组令牌之外的POJO实例_Java_Json_Spring Boot_Rest_Jackson - Fatal编程技术网

Java 无法反序列化启动\u数组令牌之外的POJO实例

Java 无法反序列化启动\u数组令牌之外的POJO实例,java,json,spring-boot,rest,jackson,Java,Json,Spring Boot,Rest,Jackson,我有一个像这样的json [ { "name" : "New York", "number" : "732921", "center" : { "latitude" : 38.895111, "longitude" : -77.036667 } }, { "name" : "San Francisco",

我有一个像这样的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
            }
    } ]
使用我在下面生成的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);
}

}
我的Rest端点如下所示(ResponseObject是我的自定义响应)

我错过了什么? 我正在寻找反序列化功能,但不确定如何设置Pojo级别

在这种情况下,我没有使用ObjectReader

有什么帮助吗

更新

通过列出地点,我解决了这个问题。 但是,如果JSON没有下面这样的统一数据,我会得到一个位置列表,每个位置都填充了一个对象。我的意思是,第一个位置填充了包含名称、编号…的对象,第二个位置填充了xxx对象(另一个对象为null)。 有没有办法为以下类型的json进行单对象绑定

[
{
    "name" : "New York",
    "number" : "732921",
    "center" : {
            "latitude" : 38.895111, 
            "longitude" : -77.036667
        }
},
{
    "xxx" : [
        "yyy" : "zzz"
      ]

} ]

]

您正在传递一个数组作为输入,但它的位置在单个对象中。

您的方法应该如下所示
公共响应对象创建(最终位置[]位置)
公共响应对象创建(最终列表位置)
谢谢。成功了。如果位置具有统一的数据,则此操作可以正常工作。如果JSON没有统一的数据,POJO会是什么样子?JSON格式更新有问题,这里的问题是我可以更改JSON,我需要准备POJO为您输入JSONTANK。成功了。如果位置具有统一的数据,则此操作可以正常工作。如果JSON没有统一的数据,POJO会是什么样子?JSON格式更新有问题,这里的问题是我可以更改JSON,我需要为输入JSON准备POJO
@POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public ResponseObject create(final Location Location) {
        ResponseObject responseObject = new ResponseObject();
        responseObject.setStatus("200");
        return responseObject;
    }
[
{
    "name" : "New York",
    "number" : "732921",
    "center" : {
            "latitude" : 38.895111, 
            "longitude" : -77.036667
        }
},
{
    "xxx" : [
        "yyy" : "zzz"
      ]

} ]