目前正在编写一些拦截器,将一些请求模型转换为另一个模型。我有所有不同类型的请求的映射,但因为它是在拦截器级别,我得到一个请求模型的java对象。我为Object添加了一个映射,这样我就可以传递拦截器中的Object,而不是将其转换为我有一个映射类型,但是,它不起作用,它不映射任何字段。有趣的是,不知怎的,当我弄乱我的映射定义的顺序时,它工作,但它不一致,所以我不知道我是如何让它工作的。
@Mappings({
@Mapping(source = "myField", target = "myOtherField")
})
NiceModel toLoggableEntity(RequestModel1 request);
@Mappings({
@Mapping(source = "myField2", target = "myOtherField")
})
NiceModel toLoggableEntity(RequestModel2 request);
//so that I can pass Object from the interceptor without having
//to figure out which request model to cast it to
NiceModel toLoggableEntity(Object request);
我认为这是不可能的
但您可以在映射类中进行实现
public abstract class MyMapper {
@Mappings({
@Mapping(source = "myField", target = "myOtherField")
})
abstract NiceModel toLoggableEntity(RequestModel1 request);
@Mappings({
@Mapping(source = "myField2", target = "myOtherField")
})
abstract NiceModel toLoggableEntity(RequestModel2 request);
NiceModel toLoggableEntity(Object request) {
if (request instanceof RequestModel1) {
return toLoggableEntity((RequestModel1) request);
}
if (request instanceof RequestModel2) {
return toLoggableEntity((RequestModel2) request);
}
//manage this case
return null;
}
}