【发布时间】:2019-12-06 21:00:40
【问题描述】:
在使用 ObjectMapper 解析对 Java 类对象的 json 响应时,我正在解析 JsonMappingException 并显示消息 - 无法从 START_ARRAY 令牌中反序列化 com.handson.ResponseParser 的实例
假设我有以下 json 响应 -
{
"statuses": [
{
"engine": "f4651cbc-a79c-4269-9711-1aeaaeff6369",
"invocations": [
{
"outputs": {
"aggrplan": {
"path": "http://someurl.com",
"repo": "S3",
"format": "application/json"
}
},
"message": "complete",
"status": "200"
}
]
}
],
"request_id": "fce46502095607ef"
}
在 main 方法中,我正在通过以下逻辑进行解析 ->
ResponseParser parser = null;
if(result.length() > 0) {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationConfig.Feature.UNWRAP_ROOT_VALUE, true);
parser = objectMapper.readValue(result, ResponseParser.class);
}
这是我想要将 json 响应映射到的类:
@JsonRootName(value = "statuses")
public class ResponseParser {
@JsonProperty(value = "request_id")
private String requestId;
@JsonProperty(value = "statuses")
private List<Map<String, String>> statuses;
public String getRequestId() {
return requestId;
}
public void setRequestId(String requestId) {
this.requestId = requestId;
}
public List<Map<String, String>> getStatuses() {
return statuses;
}
public void setStatuses(List<Map<String, String>> statuses) {
this.statuses = statuses;
}
}
【问题讨论】:
-
你的POJO结构
ResponseParser无效 -
private List<Map<String, String>> statuses;invocations 是statuses中的另一个列表,而不仅仅是一个字符串。 -
您需要为嵌套对象创建类:Status、Invocation、Output、Aggrplan。
标签: java json objectmapper