@Mapper(
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE
)
public interface CartMapper {
CartMapper INSTANCE = Mappers.getMapper(CartMapper.class);
Cart cartRequestToCart(CartRequest cartRequest);
Cart patch(CartRequest cartRequest, @MappingTarget Cart cart);
}
@Builder
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@Getter
@Setter
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Cart {
Customer customer;
Owner owner;
Integer price;
String voucher;
}
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CartRequest {
CustomerRequest customer;
OwnerRequest owner;
Integer price;
String voucher;
}
@Override
public Cart cartRequestToCart(CartRequest cartRequest) {
if ( cartRequest == null ) {
return null;
}
CartBuilder cart = Cart.builder();
if ( cartRequest.getCustomer() != null ) {
cart.customer( customerRequestToCustomer( cartRequest.getCustomer() ) );
}
if ( cartRequest.getOwner() != null ) {
cart.owner( ownerRequestToOwner( cartRequest.getOwner() ) );
}
if ( cartRequest.getPrice() != null ) {
cart.price( cartRequest.getPrice() );
}
if ( cartRequest.getVoucher() != null ) {
cart.voucher( cartRequest.getVoucher() );
}
return cart.build();
}
For方法patch
是在此处生成的,在某些设置器中缺少build()
调用
@Override
public Cart patch(CartRequest cartRequest, Cart cart) {
if ( cartRequest == null ) {
return null;
}
if ( cartRequest.getCustomer() != null ) {
if ( cart.getCustomer() == null ) {
cart.setCustomer( Customer.builder() ); // HERE build() missing
}
customerRequestToCustomer1( cartRequest.getCustomer(), cart.getCustomer() );
}
if ( cartRequest.getOwner() != null ) {
if ( cart.getOwner() == null ) {
cart.setOwner( Owner.builder() ); // HERE build() missing
}
ownerRequestToOwner1( cartRequest.getOwner(), cart.getOwner() );
}
if ( cartRequest.getPrice() != null ) {
cart.setPrice( cartRequest.getPrice() );
}
if ( cartRequest.getVoucher() != null ) {
cart.setVoucher( cartRequest.getVoucher() );
}
return cart;
}
一些小贴士如何解决这个问题?多谢.
Lombok 1.18.16的更新。
启动maven-compiler-plugin
的此版本工作配置是
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.1.Final</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
path
节的顺序很重要!
} 但是在映射器实现中,我看到清除了Target的列表,我不需要它: } 我是读错了还是做错了?
在使用MapStruct、Lombock和Spring时,我在Tomcat 9中的应用程序部署中遇到以下错误: 我的spring配置类在包层次结构的根目录中设置包扫描。映射器的实现也是在target/generated-sources下生成的: 我的错误表明Spring找不到实现类,我遗漏了什么?我试图将generated-sources文件夹添加到构建路径并将其包含在包扫描中,但没有成功。
对于内部映射,我为AWS SDK模型V2创建了POJO/DTO 为了映射变量,我正在使用Mapper注释使用MapStruct,但是在注释处理过程中生成的实现没有使用任何getter,而是正确添加了带有生成器的setter,但使用null AWS SDK V2模型没有带前缀get的getters,它直接是变量的名称,如何为这个场景配置映射结构。
我遇到了这样一种情况,我的映射方法有3个参数,所有这三个参数都用于派生目标类型的一个属性。 我在接口中创建了一个默认映射方法,保留了用于派生属性的逻辑,现在为了调用这个方法,我可以在注释中使用。 有没有什么方法可以在mapstruct注释中做到这一点,比如,我试着用expression属性和qualifiedByName来注释注释,但它不起作用:
如果标题不清楚,我深表歉意,让我给出示例代码: UpdateProfileDto 编码映射 密码映射器 用户映射器 生成的UserMapperImpl 从生成的,我不仅想检查是否有值。。。但是要检查和是否有值,请继续执行。 我的意思是这样的: 问题 我怎么能改变我的映射接口,以便我将检查和,然后它将设置目标,并且仍然使用? 如果我尝试使用而不是并检查和是否都有值,然后将设置为。否则,它不会对使用做
我试图让Mapstruct注释处理器在Gradle项目中的IntelliJ中工作。 我所做的: > 在我的中配置了Mapstruct注释处理器: 在“构建、执行、部署->构建工具->gradle->runner”下的首选项中选择了“委托IDE构建/运行操作来分级”