【发布时间】:2019-11-19 15:44:20
【问题描述】:
我有以下 json
{
"root": {
"status": "UP",
"connection1": {
"status": "UP"
},
"connection2": {
"status": "UP"
}
}
}
我还有以下 POJO 类我想将 JSON 转换成
@JsonIgnoreProperties(ignoreUnknown = true)
public class POJO {
@JsonProperty("root")
@JsonDeserialize(using = RootDeserializer.class)
private Root root;
//getters + setters
}
public class Root {
private boolean isAlive;
private List<Connection> connections;
public Root(boolean isAlive, List<Connection> connections) {
this.isAlive = isAlive;
this.connections = connections;
}
//getters + setters
}
@JsonIgnoreProperties(ignoreUnknown = true)
public class Connection {
private String status;
//getters + setters
}
最后我有这个反序列化器可以将 json 转换为 Root 实例
public class RootDeserializer extends JsonDeserializer<Root> {
private static final String CONNECTION_PREFIX = "connection";
private static final String UP_STATUS = "UP";
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public Root deserialize(JsonParser parser, DeserializationContext context) throws IOException {
Map<String, Map<String, Object>> rootJsonMap = parser.readValueAs(Map.class);
boolean isAlive = StringUtils.equals(UP_STATUS, String.valueOf(rootJsonMap.get("status")));
List<Connection> connections = rootJsonMap.entrySet()
.stream()
.filter(entry -> StringUtils.startsWithIgnoreCase(entry.getKey(), CONNECTION_PREFIX))
.map(this::mapToConnection)
.collect(Collectors.toList());
return new Root(isAlive, connections);
}
private PosServerConnection mapToConnection(Map.Entry<String, Map<String, Object>> entry) {
Map<String, Object> connectionJsonMap = entry.getValue();
return objectMapper.convertValue(connectionJsonMap, Connection.class);
}
}
这样我可以将我的所有连接分组到根类中的一个列表中。 我的问题是有没有其他方法可以做到这一点??
我想在没有这么大的反序列化器的情况下只在我的 Pojo 类上使用 Jackson 注释来做到这一点
【问题讨论】:
-
是的,还有其他方法可以做到这一点。 --- Why is “Is there a way to…” a poorly worded question? --- (仅供参考:我不是反对者)
-
@Andreas 好的。我编辑我的问题
-
是的,您编辑了问题文本,但没有改进问题。您只是添加了您喜欢的陈述,但问题仍然是一样的,所以答案仍然是一样的:是的,还有其他方法可以做到这一点。
标签: java json jackson objectmapper