gpt4 book ai didi

spring-mvc - 映射器装饰器未编译

转载 作者:行者123 更新时间:2023-12-02 20:11:04 25 4
gpt4 key购买 nike

我的映射器的映射器装饰器未编译。映射器正在编译,但装饰器未编译。因为,在构建过程中,即使我在映射器装饰器中执行此操作,我也会遇到类型转换错误。还有什么要补充的吗?

映射器代码:

 @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);

}

我的一个建议是,如果您仅使用委托(delegate)来映射额外的字段,我会添加自定义方法或使用 @AfterMapping@BeforeMapping 来处理该问题。

关于spring-mvc - 映射器装饰器未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com