是否有任何通用实现可以将Scala案例类转换为SolrDocument?
由于我找不到任何我可以重用的mapper实用程序,我采用了以下方法: 1.创建案例类对象 2.通过将case类对象转换为Map来获取非空字段 3.逐个添加字段到可变文档。
这种方法适用于我,但我必须创建中间Map对象。出于冗长和复杂性的原因,我想避免这种情况。有没有更好的方法呢?
答案 0 :(得分:0)
不是一个完整的答案(我会在评论中写这个,但需要更多的代表),但只是你指向一个方向,宏是以类型安全的方式做到这一点,而无需编写锅炉板每个案例类的映射函数。 JSON库处理相同的问题(除了用JSON对象替换SolrDocument)。作为示例,您可以查看Play Framework中的JSON序列化程序/反序列化宏实现:
我怀疑这个解决方案比你想要的要重一点。我接近它的方法是为每个案例类编写愚蠢的样板映射函数,并且如果这成为一个重要的负担,则只沿着宏路径。
答案 1 :(得分:0)
修改these个答案之一似乎相当简单:
def getSolrDoc(cc: Product): SolrDocument = {
val solrDoc = new SolrDocument
cc.getClass.getDeclaredFields.foreach { f =>
f.setAccessible(true)
solrDoc.addField(f.getName, f.get(cc))
}
solrDoc
}
用法:
case class X(a:Int, b:String)
val x = X(1, "Test")
val doc = getSolrDoc(x)
println(doc) // prints SolrDocument{a=1, b=Test}