如何更正具有相同父级的不同类
Spring DTO jackson对象
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type",
)
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = B.class, name = "TypeB"),
@JsonSubTypes.Type(value = C.class, name = "TypeC")
})
abstract class A {
Type type;
String id;
}
class B extends A {
String name;
}
class C extends A {
String description;
}
实体类包含所有字段
class myEntity {
Type type;
String id;
String name;
String description;
}
映射器
public abstract class IntegrationMapper {
public A toDto(MyEntity myEntity);
public MyEntity fromDto(A integrationDTO)
}
如何将不同的实例 B 或 C 创建到 toDto 取决于类型值?
我用这样的smth
public abstract class IntegrationMapper {
public A toDto(MyEntity myEntity) {
if(myEntity.type == TypeB) {
return toB(myEntity);
} else if (myEntity.type == TypeC) {
return toC(myEntity);
}
}
public MyEntity fromDto(A a) {
if(a instanceOf B) {
return fromDto((B) a);
} else if (a instanceOf C) {
return fromDto((C) a);
}
}
protected B toB(MyEntity myEntity);
protected C toC(MyEntity myEntity);
protected MyEntity fromDto(B c);
protected MyEntity fromDto(C c);
}
但我怀疑使用ObjectFactory或类似的smth可以做得更好
为了避免长if语句和为
如果要对B
和C
中的字段执行映射,则必须为它们创建方法。MapStruct是一个代码生成,所以它对运行时类型一无所知。
您当前的方法就是您正在寻找的方法。我不认为使用ObjectFactory
可以帮助你。它可以帮助您的唯一方法是,如果您想将MyEntity
映射到基础A
。在这种情况下,它将仅在基础和实体之间生成映射,这不是您要查找的。
有一个开放的功能请求(#131)可以为您生成这些检查实例。