解码JSON字符串到Java对象的最佳方式



我有一个将接收不同JSON格式的ServerEndpoint。由于每个消息类型只允许有一个消息处理程序,因此我的一个解码器必须将消息转换为相应的Java对象。

在我的解码器中,我试图使用ObjectMapper类将收到的消息转换为SubClassA或SubClassB(实现相同的接口)。ObjectMapper类有一个readValue方法,该方法需要我试图将json映射到的类型,并且当它无法转换为指定类型时将抛出异常。

我目前像下面这样解码它,但它不是很优雅。

@Override
public Message decode(String message) throws DecodeException {
    ObjectMapper mapper = new ObjectMapper();
    try {
        SubclassA obj = mapper.readValue(message, SubclassA .class);
        return obj;
    } catch (IOException e) {
    }
    try {
        SubclassB obj = mapper.readValue(message, SubclassB .class);
        return obj;
    } catch (IOException e) {
    }
    throw new DecodeException(message, "Failed to decode message.");
}

使用ObjectMapper将JSON字符串解码为相应Java对象的最佳方法是什么?

使用Jackson,您可以为父对象声明子类型。你的Json将包含@type与子类型的名称,看看这篇文章用Jackson将JSON反序列化成多态类型——一个完整的例子给了我一个编译错误

Jackson是在Java中使用JSON的最佳选择之一。

对于多态反序列化,考虑以下几点:

  • 使用@JsonTypeInfo注释
  • 对于不适合@JsonTypeInfo标注的情况,可以考虑使用StdDeserializer标注。这个答案会对你有所帮助。

相关内容

  • 没有找到相关文章

最新更新