Mapper装饰器没有被编译
Mapper decorator not getting compiled
我的映射器的映射器装饰器没有得到 compiled.Mapper 正在编译,但装饰器没有。因为,在构建过程中我遇到了类型转换错误,即使我是在映射器装饰器中进行的。还有什么要补充的吗?
映射器代码:
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
public TwoObject convertToTwoObject(OneObject one);
}
装饰器代码:
public abstract class OneMapperDecorator implements OneMapper {
private final OneMapper delegate;
public OneMapperDecorator (OneMapper delegate) {
this.delegate = delegate;
}
@Override
public TwoObject convertToTwoObject(OneObject one)
{
TwoObject two=delegate.convertToTwoObject(one);
two.setTotalFare(new BigDecimal(one.getPrice()));//string to bigdecimal conversion
return two;
}
}
装饰器旨在增强映射而不是取代它。 MapStruct 无法知道您正在装饰器中映射 totalFare
。您有 2 个选择:
定义自定义映射方法
在您的 OneMapper
中,您可以添加一个默认方法来执行映射(如错误所述。
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
@Mapping(target = "totalFare", source = "price");
TwoObject convertToTwoObject(OneObject one);
default BigDecimal map(String value) {
return value == null ? null : new BigDecimal(value);
}
}
忽略映射
如果您想在装饰器中进行映射,则需要告诉 MapStruct 不要映射它。
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
@Mapping(target = "totalFare", ignore = true);
TwoObject convertToTwoObject(OneObject one);
}
我的一个建议,如果你只使用你的委托来映射额外的字段,我会添加自定义方法或使用 @AfterMapping
和 @BeforeMapping
来处理。
我的映射器的映射器装饰器没有得到 compiled.Mapper 正在编译,但装饰器没有。因为,在构建过程中我遇到了类型转换错误,即使我是在映射器装饰器中进行的。还有什么要补充的吗?
映射器代码:
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
public TwoObject convertToTwoObject(OneObject one);
}
装饰器代码:
public abstract class OneMapperDecorator implements OneMapper {
private final OneMapper delegate;
public OneMapperDecorator (OneMapper delegate) {
this.delegate = delegate;
}
@Override
public TwoObject convertToTwoObject(OneObject one)
{
TwoObject two=delegate.convertToTwoObject(one);
two.setTotalFare(new BigDecimal(one.getPrice()));//string to bigdecimal conversion
return two;
}
}
装饰器旨在增强映射而不是取代它。 MapStruct 无法知道您正在装饰器中映射 totalFare
。您有 2 个选择:
定义自定义映射方法
在您的 OneMapper
中,您可以添加一个默认方法来执行映射(如错误所述。
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
@Mapping(target = "totalFare", source = "price");
TwoObject convertToTwoObject(OneObject one);
default BigDecimal map(String value) {
return value == null ? null : new BigDecimal(value);
}
}
忽略映射
如果您想在装饰器中进行映射,则需要告诉 MapStruct 不要映射它。
@Mapper
@DecoratedWith(OneMapperDecorator.class)
public interface OneMapper {
@Mapping(target = "totalFare", ignore = true);
TwoObject convertToTwoObject(OneObject one);
}
我的一个建议,如果你只使用你的委托来映射额外的字段,我会添加自定义方法或使用 @AfterMapping
和 @BeforeMapping
来处理。