Java Can';无法从JSON获取对象
所以,我目前正在使用AWS lambda,我有一个奇怪的行为问题。 如果microservices返回一个对象列表,我可以通过将其强制转换为list来获取所有项目 JSON: 用这样简单的代码Java Can';无法从JSON获取对象,java,json,serialization,jackson,jhipster,Java,Json,Serialization,Jackson,Jhipster,所以,我目前正在使用AWS lambda,我有一个奇怪的行为问题。 如果microservices返回一个对象列表,我可以通过将其强制转换为list来获取所有项目 JSON: 用这样简单的代码 return (List<Delegation>) response.getBody().getPayload(); 同样的事情(除此之外,它现在不在列表中) 当我试着用同样的方式来表达时 (Delegation) response.getBody().getPayload(); 我得到了
return (List<Delegation>) response.getBody().getPayload();
同样的事情(除此之外,它现在不在列表中)
当我试着用同样的方式来表达时
(Delegation) response.getBody().getPayload();
我得到了类强制转换异常,表示我无法将java.util.LinkedHashMap
强制转换为我的类型
然后我尝试使用Jackson mapper:
mapper.convertValue(response.getBody().getPayload(), Delegation.class);
但我收到了一个错误
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: Expected array or string.
at [Source: N/A; line: -1, column: -1] (through reference chain: xxx.Delegation["start"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216)
at com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:962)
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:61)
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:17)
xxx
只是为了隐私。
我正在使用jhipster生成的代码
委托类
public class Delegation {
private Long id;
private String user;
private LocalDate start;
private LocalDate end;
}
省略了setter和getter
同样的错误也会发生在我尝试这样做的时候
mapper.convertValue(input.get(“start”)、LocalDate.class)代码>
其中输入转换为LocalDate(java.lang.IllegalArgumentException:Unexpected token(START_对象),预期的START_数组:预期的数组或字符串。
在[Source:N/A;line:-1,column:-1])第一个JSON中,payload
是一个数组,它将被转换成一个列表。在第二个JSON中,payload
是一个对象。难怪您不能将其转换为列表
。您需要将该对象收集为单个对象
,并可能将其添加到列表
中,如果您希望它位于列表
中,在第一个JSON中,负载
是一个数组,它将转换为列表
。在第二个JSON中,payload
是一个对象。难怪您不能将其转换为列表
。您需要将该对象收集为单个对象
,并可能将其添加到列表中
,如果您希望它位于列表中
?我不是想把它转换成一个列表?我不想把它转换成一个列表什么是T有效负载
运行时绑定的是哪种类型?ResponseClass
的实例是如何创建的?@Meiko嘿,我将T负载切换为对象负载,但这并没有改变任何东西。它是由RestTemplate创建的。ResponseEntity response=template.postForEntity(“端点”,请求,ResponseClass.class);您是否可以分析结果java.util.LinkedHashMap
(来自response.getBody().getPayload()
)的结果。。。它有预期的结构吗?是的,它有。我登记了。当列表被返回时,它实际上是一个LinkedHashMaps列表,当转换到myObject的列表时,它可以正常工作。但是当只返回LinkedHashMap时,它不能被强制转换到myObject。对于我来说这真的很难理解如果你想,你可以在你的问题中添加类委托
…什么是T有效载荷
运行时绑定了哪种类型?ResponseClass
的实例是如何创建的?@Meiko嘿,我将T负载切换为对象负载,但这并没有改变任何东西。它是由RestTemplate创建的。ResponseEntity response=template.postForEntity(“端点”,请求,ResponseClass.class);您是否可以分析结果java.util.LinkedHashMap
(来自response.getBody().getPayload()
)的结果。。。它有预期的结构吗?是的,它有。我登记了。当列表被返回时,它实际上是一个LinkedHashMaps列表,当转换到myObject的列表时,它可以正常工作。但是当只返回LinkedHashMap时,它不能被强制转换到myObject。对我来说,这真的很难理解如果你想,你可以在你的问题中添加类委托
。。。
mapper.convertValue(response.getBody().getPayload(), Delegation.class);
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (START_OBJECT), expected START_ARRAY: Expected array or string.
at [Source: N/A; line: -1, column: -1] (through reference chain: xxx.Delegation["start"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216)
at com.fasterxml.jackson.databind.DeserializationContext.wrongTokenException(DeserializationContext.java:962)
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:61)
at xxx.util.JSR310LocalDateDeserializer.deserialize(JSR310LocalDateDeserializer.java:17)
public class Delegation {
private Long id;
private String user;
private LocalDate start;
private LocalDate end;
}