有没有办法设置
ObjectMapper
的默认行为来创建 Java Set
而不是从 JSON 数组创建 List
更新
让我添加一些有关我的问题的详细信息
我的数据是递归结构,字段
params
可能会在递归JSON中出现多次。在我的 Java 模型中,我有相应的字段 Map<String, Object> params
。此映射的值可能会有所不同 - 其中一种可能是 JSON 数组。默认情况下会创建 List,我的目标是将其切换为 Set。
更新2
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.EXISTING_PROPERTY)
@JsonSubTypes({
@JsonSubTypes.Type(value = Group.class, name = "group"),
@JsonSubTypes.Type(value = Value.class, name = "value")
})
public interface Node {
String getType();
}
public class Group implements Node {
List<Node> content;
}
public class Value implements Node {
String name;
Map<String, Object> params;
}
可能的 JSON
{
"content": [
{
"name": "ID",
"params": {
"ids": [
"1",
"2",
"3",
"4",
"5"
]
},
"type": "value"
},
{
"name": "SUM",
"params": {
"sum": 400
},
"type": "value"
}
],
"type": "group"
}
我当前的代码是
String content = "json-here";
Node node = objectMapper.readValue(content, Node.class);
你可以做
public class Group implements Node {
private Set<Node> content;
public void setContent(List<Node> content) {
this.content = content == null ? null : new LinkedHashSet<>(content);
}
}