【发布时间】:2011-04-16 17:23:27
【问题描述】:
我正在创建一个以 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,但如果可以的话,尽量避免这种复杂性。
【问题讨论】: