rak*_*esh 6 java json pojo jackson jackson-databind
我正在研究一个Java项目,该项目使用Jackson库解析从外部API接收到的JSON响应。响应中的字段之一有时作为单个对象出现,在某些情况下,它作为对象数组出现。因此,我不确定应该选择哪种数据类型将此响应映射回Java对象。如何将两种响应类型正确映射到Java对象?
在上述可能的重复项中,响应始终是一个列表,但在我看来,它不是。所以我不认为它是上述问题的重复。
以下是我收到的回复:
"configuration": {
"additionalServices": {
"type": "Standard DDOS IP Protection"
},
}
Run Code Online (Sandbox Code Playgroud)
有时这就是我收到相同回复的方式:
"configuration": {
"additionalServices": [
{
"type": "Standard DDOS IP Protection"
},
{
"type": "Remote Management"
}
],
}
Run Code Online (Sandbox Code Playgroud)
这是我的Java映射现在的样子:
"configuration": {
"additionalServices": {
"type": "Standard DDOS IP Protection"
},
}
Run Code Online (Sandbox Code Playgroud)
"configuration": {
"additionalServices": [
{
"type": "Standard DDOS IP Protection"
},
{
"type": "Remote Management"
}
],
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下声明,则它将仅解析数组输出,并为第一个响应抛出异常:
@JsonIgrnoreProperties(ignoreUnknown = true)
public class Configuration {
private List<AdditionalServices> additionalServices;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下声明,则它将仅解析第一个响应,并为第二个响应引发异常:
@JsonIgrnoreProperties(ignoreUnknown = true)
public class AdditionalServices {
private String type;
}
Run Code Online (Sandbox Code Playgroud)
解析数据的异常:
无法从START_OBJECT令牌中反序列化java.util.ArrayList的实例
您可以通过启用以下ACCEPT_SINGLE_VALUE_AS_ARRAY功能来指示Jackson来“包装”数组中的单个值:
确定强制将非数组(JSON)值强制用于Java集合(数组,java.util.Collection)类型的功能。
例如:
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
Run Code Online (Sandbox Code Playgroud)
然后,只要additionalServices是集合类型,反序列化就应该对单值或数组成功。
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |