我正在创建一个接收JSON消息请求的服务。我需要解析这些消息并根据请求类型采取适当的行动。例如(伪代码):
switch(request.type) {
case "NewOrder":
createNewOrder(order);
break;
case "CancelOrder"
cancelOrder(orderId);
break;
}
看起来大多数JSON API(至少那些为您执行对象映射的API)需要根对象类型进行反序列化。有没有什么优雅的方法可以避免这种情况?
例如,在Jackson API中(使用完整对象映射),我需要按以下方式调用映射器:
NewOrder newOrder = mapper.readValue(src, NewOrder.class);
CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
这意味着我需要在解析之前知道对象的类。我真正需要的是一种方法来查看JSON字符串,确定请求类型,然后调用适当的readValue()方法 - 就像这样:
String requestType = getRequestType(src);
switch(request.type) {
case "NewOrder":
NewOrder newOrder = mapper.readValue(src, NewOrder.class);
createNewOrder(newOrder.order);
break;
case "CancelOrder"
CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
cancelOrder(cancelOrder.orderId);
break;
}
使用Jackson或其他Java JSON解析器是否可以实现这一点?我相信我可以使用流式API或基于节点的API来进行更低级别的操作,但如果可能的话,尽量避免这种复杂性。