我想将案例类 UserDTO 转换为案例类 User 我在无形案例类转换中找到了解决方案
class SameFieldConverter[T] {
def apply[S, SR <: HList, TR <: HList, MR <: HList, IR <: HList](s: S)(implicit
genS: LabelledGeneric.Aux[S, SR],
genT: LabelledGeneric.Aux[T, TR],
merger: Merger.Aux[SR, HNil, MR],
intersection: Intersection.Aux[MR, TR, IR],
align: Align[IR, TR]) = genT.from(intersection(merger(genS.to(s), HNil)))
但是我对不同的字段有问题,例如在 UserDTO 中我有字段名称、姓氏,但在 User 中我有全名。
case class UserDTO(name:String, surname:String, age:Int){
def toDomain:User = User(name + surname, age)
}
case class User(fullName:String, age:Int)
另外,我对不同的字段名称也有问题,例如姓名 -> 姓氏
case class UserDTO(name:String, surname:String, age:Int)
case class User(firstName:String, surname:String, age:Int)
我想到的解决方案就像在羽毛笔别名(“name”,_.surname)中一样,但我的脑子很小。我还考虑过研究使用 scala 反射 API
如果您只是想将一个案例类转换为另一个案例类,并且这两个案例类具有相同或相似的字段,我认为shapeless有点过头了。对于这样的情况,我会选择chimney。代码应该看起来像
build.sbt
Transformer.scala
虚拟主方法应如下所示
Main.scala
输出将是