我使用的是最新版本的Sping Boot 2.2.5以上和Java 15、lombok、Mapstruct来Map一些pojo。
当使用***版本2.2.5的 Spring Boot ***时,我得到了预期的结果:
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-01-02T21:59:24+0100",
comments = "version: 1.4.1.Final, compiler: javac, environment: Java 15.0.1 (Oracle Corporation)"
)
@Component
public class ProduitMapperImpl implements ProduitMapper {
@Override
public ProduitDtoResponse produitToProduitDtoResponse(Produit produit) {
if ( produit == null ) {
return null;
}
ProduitDtoResponseBuilder produitDtoResponse = ProduitDtoResponse.builder();
produitDtoResponse.id( produit.getId() );
produitDtoResponse.nom( produit.getNom() );
produitDtoResponse.prix( produit.getPrix() );
return produitDtoResponse.build();
}
@Override
public Produit produitToProduitDtoResponse(ProduitDtoResponse produitDto) {
if ( produitDto == null ) {
return null;
}
ProduitBuilder produit = Produit.builder();
produit.id( produitDto.getId() );
produit.nom( produitDto.getNom() );
produit.prix( produitDto.getPrix() );
return produit.build();
}
}
但是当使用 Version 2.4 and above 时,* 没有builder*,相反,我有 *java new关键字,没有其他字段 *,我得到:
这是maven pom会议,这是行不通的:BOM
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-01-02T22:05:16+0100",
comments = "version: 1.4.1.Final, compiler: javac, environment: Java 15.0.1 (Oracle Corporation)"
)
@Component
public class ProduitMapperImpl implements ProduitMapper {
@Override
public ProduitDtoResponse produitToProduitDtoResponse(Produit produit) {
if ( produit == null ) {
return null;
}
ProduitDtoResponse produitDtoResponse = new ProduitDtoResponse();
return produitDtoResponse;
}
@Override
public Produit produitToProduitDtoResponse(ProduitDtoResponse produitDto) {
if ( produitDto == null ) {
return null;
}
Produit produit = new Produit();
return produit;
}
}
我唯一改变的是Sping Boot 版本,它按预期工作,请问Spring Boot的 * 版本2.4及以上 * 是否有任何变通方法或问题?
1条答案
按热度按时间wmtdaxz31#
您的问题是,由于
pom.xml
中的这一点:您将从您的父pom的父pom
spring-boot-starter-parent
(您的祖父pom?)获得Lombok版本,因此使用Sping Boot 2. 4. 0您将获得Lombok的更新版本。从Lombok 1.18.16开始,您需要添加另一个依赖项。请参阅MapStruct FAQ中的回答:
如果您使用的是Lombok 1.18.16或更新版本,您还需要添加lombok-mapstruct-binding以使Lombok和MapStruct协同工作。
它们有一个sample project来演示如何一起使用它们。下面是示例
pom.xml
的相关部分: