我有一个ServerEndpoint,它将接收不同的JSON格式。由于每个消息类型只允许一个消息处理程序,因此我的一个解码器必须将消息转换为相应的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对象的最佳方法是什么?
答案 0 :(得分:3)
使用Jackson,您可以为父对象声明子类型。您的Json将包含带有子类型名称的@type,请查看此帖子 Deserialize JSON with Jackson into Polymorphic Types - A Complete Example is giving me a compile error
答案 1 :(得分:0)
Jackson是在Java中使用JSON的最佳选择之一。
对于多态反序列化,请考虑以下内容:
@JsonTypeInfo
注释。@JsonTypeInfo
注释不适合的情况,请考虑使用StdDeserializer
。这个answer会对您有所帮助。