在REST请求之后,无法将json反序列化为对象映射

时间:2018-01-22 16:17:44

标签: java json rest

我的服务器响应了我的json:

    {
    "clients": {
        "0": {
            "id": 12370691,
            "fio": ""
        },
        "2": {
            "id": 12384782,
            "fio": "name2"
        },
        "3": {
            "id": 12389624,
            "fio": "Name3"

        }
    }
}

由于jsons,我得到了pojos。

第一个Pojo包含对象地图

    @Data
public class GetClientsResponse {
    @JsonProperty("clients")
    Map<String, ClientResponse> clientMap;

    public List<ClientResponse> getListOfValues() {
        if (Objects.nonNull(this.clientMap)) {
            return this.clientMap.entrySet()
                    .stream()
                    .map(entry -> entry.getValue())
                    .collect(Collectors.toList());
        }
        return Collections.emptyList();
    }
}

和ClientResponse类

    @Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class ClientResponse {
    @JsonProperty("id")
    private int clientId;
    @JsonProperty("fio")
    private String fullName;
}

我有下一个错误:

  

出现意外错误(type = Bad Request,status = 400)。 JSON   解析错误:无法反序列化java.util.LinkedHashMap的实例   超出START_ARRAY标记;嵌套异常是   com.fasterxml.jackson.databind.JsonMappingException:不能   从START_ARRAY反序列化java.util.LinkedHashMap的实例   令牌在[来源:java.io.PushbackInputStream@2a8f551b;行:1,   专栏:12](通过参考链:   com.lineup.flatsender.model.dto.response.avers.getclinets.GetClientsResponse [&#34;客户&#34;])   块引用

有人可以解释一下这个问题吗?因为它在1个月前工作,我没有问题。 我使用import org.springframework.web.client.RestOperations;

2 个答案:

答案 0 :(得分:-1)

最近服务有变化吗? 400响应表明服务器无法理解您的请求。

你能发布你得到的实际JSON吗?该错误表明您正在使用JSON数组返回某些内容,但您发布的内容并未显示数组

答案 1 :(得分:-1)

杰克逊对象映射器

JsonMappingException: out of START_ARRAY token异常为thrown,因为它期待Object {},而它在响应中找到了Array [{}]

因此,可能会更改来自webservice的响应,并且您的客户端数据现在将作为Array而不是object返回。