当前位置: 首页 > 知识库问答 >
问题:

SpringBoot2.4及以上版本的Mapstruct和Lombok意外结果此版本有任何解决方法或问题吗?

韩安顺
2023-03-14

我正在使用SpringBoot2.2.5以上的最新版本和Java15、lombok、Mapstruct来映射一些POJO。

使用spring boot的2.2.5版时,我得到了预期的结果:

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

但是当使用2.4及以上版本时,没有构建器,而是使用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;
}
}

我唯一更改的是SpringBoot版本,它可以正常工作,请问SpringBoot 2.4及以上版本是否有任何解决方法或问题?

共有1个答案

长孙鸿振
2023-03-14

您的问题是,正因为如此,在pom.xml中:

<version>${lombok.version}</version>

您从父pom的父pom获得Lombok版本,spring boot starter父pom(您的祖父母pom?),因此,使用spring boot 2.4.0,您将获得一个更新版本的Lombok。

从Lombok 1.18.16开始,您需要添加另一个依赖项。请参见MapStruct常见问题解答中的此答案:

如果您使用的是Lombok 1.18.16或更新版本,则还需要添加Lombok mapstruct绑定,以使Lombok和mapstruct协同工作。

他们有一个示例项目来演示如何一起使用它们。下面是示例pom.xml的相关部分:

<properties>
    <!-- . . . -->
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>

<!-- . . . -->

        <annotationProcessorPaths>
            <!-- . . . -->
            <path>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok-mapstruct-binding</artifactId>
                <version>${lombok-mapstruct-binding.version}</version>
            </path>
        </annotationProcessorPaths>
 类似资料:
  • 本文向大家介绍关于spring版本与JDK版本不兼容的问题及解决方法,包括了关于spring版本与JDK版本不兼容的问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 在用ssh框架测试时出现问题,如下: 解决方法:更换JDK或者换spring包 spring-xx-3.xx对应JDK7 spring-xx-4.xx对应JDK8 补充:下面看下JDK8与Spring4以下的版本不兼容问题 昨天

  • 本文向大家介绍详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题,包括了详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题的使用技巧和注意事项,需要的朋友参考一下 数据库MySQL版本8.0.18 下载一个DBeaver.exe 下载地址:https://dbeaver.io/download/ 点击新建 --》数据库连接 --》下一步                 

  • } 问题1:“汪汪狗”的结果。shouldWakeUp()'被忽略 问题2:从未使用该方法的返回值 这是什么意思?我应该如何解决此问题?

  • 一直在尝试解决这个问题,但没能解决。这是udacity课程,我试图使用挂起的意图创建通知,但挂起的意图是可变的,我尝试了这种方式。 视图模型 片段 当我正在研究由gradle依赖项解决的其他类似问题时,我已经添加了 但是显示这个错误 Udacity启动器代码

  • 我有一个查询,它可以在MySQL8.0上运行,但不能在下面的版本上运行,比如MySQL5.5。当我在web服务器上遇到这个错误时,如何使其兼容:#1064-您的SQL语法中有一个错误;查看与您的MySQL服务器版本相对应的手册,以了解第11行“(partition by pid order by Age”附近使用的正确语法 https://dbfiddle.uk/?rdbms=mysql_8.0&

  • 分析错误:语法错误,第50行的/home/capollos/public\u html/canopyinteriors/index.php中出现意外的“类”(T_类),需要标识符(T_字符串)或变量(T_变量)或“{”或“$” 第50行。。这与主机cpanel上的php版本有关。