我使用Java POJO来处理具有无架构数据库(如ElasticSearch)的模型;通过将它们序列化为杰克逊的JSON。模型中的几个字段是"固定",为数据库中的每个对象共享。
但是,某些对象可能具有不同的字段,如在每个无架构的体系结构中。处理这样的模型的最佳做法是什么?
目前,我在模型本身中使用简单的多维HashMap,但它很棘手,可能不是最好的解决方案(特别是,无法处理多级领域)。对于像这样的情况,是否有最好的做法?
答案 0 :(得分:0)
一种可能性是使用多态类型,其中基类可以定义公共属性集,子类可以定义其他属性。根据您的需要,您可能还需要启用多态处理;也就是说,取决于你是否从上下文中知道预期的类型(不需要类型信息),或者如果不知道(也就是说,它存储在JSON文档中;如果是,则需要进行多态处理)。
然而:更简单,更动态(但更少类型安全)的方法可能是使用" dyna-beans"方法,例如在这里解释:
http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html
以便您定义一组命名的,完全类型的核心属性;其余的可以根据需要包括在内。这些额外属性的类型需要是"自然"类型(字符串,数字,布尔值,地图,列表),但您可以使用Jackson在这些和POJO之间来回进一步转换(使用ObjectMapper.convertValue()
)。
或者,如果您愿意,也可以将动态属性指定为JsonNode
,在这种情况下,您可以获得良好的可遍历JSON树访问。