[英]IndexOutOfBoundException while Deserializing a json response using jackson
I am trying to deserialize a json response from another API but i keep on getting indexoutofboundException.我正在尝试反序列化来自另一个 API 的 json 响应,但我不断收到 indexoutofboundException。 Below is my json response that i am trying to deserialize -
下面是我试图反序列化的 json 响应 -
{
"data" : [ ],
"metadata" : {
"transactionId" : "cfba12f56eaf6f24"
}
}
For deserializing i am using below implementation -对于反序列化,我使用以下实现 -
ResponseEntity<String>response=restTemplate.exchange(meta_uri,HttpMethod.POST,httpEntity,String.class);
String source=response.getBody();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
DataResponse metaResponse=mapper.readValue(source,DataResponse.class);
DataResponse.class looks like this - DataResponse.class 看起来像这样 -
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.util.ArrayList;
@AllArgsConstructor
@NoArgsConstructor
@Setter
@Getter
@ToString
public class DataResponse {
@JsonProperty
private ArrayList<APIData>data;
@JsonProperty
private MetaData metadata;
} }
APIData.class looks like this - APIData.class 看起来像这样 -
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.util.*;
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString
public class APIData {
@JsonProperty
private Map<String,Object> key;
@JsonProperty
private List<String> contacts;
}
Basically my implementation works when the json response is like this -基本上,当 json 响应如下时,我的实现就可以工作了-
{
"data": [
{
"key": "123",
"contacts": [
"jon_doe@email.com",
"jon1_do3@email.com"
]
}
],
"metadata": {
"transactionId": "11112233333"
}
}
but gives me indexOutofBoundException when data array inside the response is empty -但是当响应中的数据数组为空时给我 indexOutofBoundException -
{
"data" : [ ],
"metadata" : {
"transactionId" : "cfba12f56eaf6f24"
}
}
I guess maybe data that post request return is wrong.我想也许发布请求返回的数据是错误的。 I do a test with string as your said.
如您所说,我用字符串进行了测试。 it is work.
这是工作。
@Test
public void mapper() throws Exception{
String json = "{\n" +
" \"data\" : [ ],\n" +
" \"metadata\" : {\n" +
" \"transactionId\" : \"cfba12f56eaf6f24\"\n" +
" }\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
DataResponse metaResponse=mapper.readValue( json ,DataResponse.class);
System.out.println("=========" + metaResponse);
// output
// =========DataResponse(data=[], metadata=MetaData(transactionId=cfba12f56eaf6f24))
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.