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

如何告诉 MapStruct “不”使用龙目岛生成器?

西门凯康
2023-03-14

我有以下类和映射器来映射它们。如何将地图结构配置为“不”使用龙目岛构建器?(不删除@Builder注释)?使用最新版本的龙目岛和地图结构时,地图结构将在使用@Builder注记时自动使用构建器。我找不到禁用它的方法,因为我需要在@AfterMapping方法中使用实例,因为构建器不会公开所有必需的方法(@SuperBuilder在此用例中是不允许的)

@Entity(name = "user_details")
@Data
@Builder
public class User extends AuditableEntityBase {

    @Version
    @NotNull
    private Integer version;

    @NotNull
    private String name;

    @NotNull
    private String email;

    @NotNull
    private Address address; // Just another Class containing another class that is mapped as well.

}

@Value
@Builder
public class UserDto extends AuditableEntityBaseDto {

    @NotNull
    private Integer version;

    @NotNull
    private String name;

    @NotNull
    private String email;


    @NotNull
    private AddressDto address;
}


@Mapper(componentModel = "spring")
class UserRestMapper {
    public abstract UserDto map(User obj);

}

    @AfterMapping
    public void decorate(User source, @MappingTarget AuditableEntityBase target) {
// Method is never called.
// Method is called in case  the second argument is: "@MappingTarget UserDto.UserDtoBuilder target"
    }

共有2个答案

司寇阳朔
2023-03-14

不知道如何禁用它,但为什么不这样做呢?

@Mapper(componentModel = "spring")
abstract class UserRestMapper {
    public abstract UserDto map(User obj);
    
    public UserDto decoratedMap(User obj) {
        UserDto mapped = map(obj);
        // your after mapping logic
        return mapped;
    }
}
百里渊
2023-03-14

如果要禁用使用构建器,可以通过将@Builder(禁用构建器 = true)添加到@Mapper来执行此操作。

例如

@Mapper(componentModel = "spring", builder = @Builder(disableBuilder = true))
class UserRestMapper {
    public abstract UserDto map(User obj);

}

注意 @Builder来自组织结构

 类似资料:
  • 我试图在带有Java8的Maven项目中使用Lombok,但是当我应用@Data注释时,Lombok不会生成任何Getters和Setters。我尝试使用这里提到的Maven编译器插件版本3.5,但没有帮助。有人知道我需要使用哪些版本吗? pom.xml

  • 我只是试图将一个基于Maven的项目发送到另一台计算机上,而可怕的是,到处都是红色标记!! 但是,构建得很好。 很快,我注意到Lombok没有为我的类生成getter和setter,尽管和被Eclipse正确识别。

  • 我想将JPA元模型添加到我的项目- 我发现很多例子我怎么能做到这一点,但都与。另外我发现这个网站:https://plugins.gradle.org/search?term=metamodel 尝试前三个插件。每个插件我得到错误:在类标记为lombok注释和一些类不是。它是一些插件的例子: 1) 在Spring中,哪个插件或方法是创建JPA元模型最正式(正确的)? 2)如何仅指定具有的包而不扫描

  • 我在使用Lombok在IntelliJ中构建我的项目时遇到了麻烦。Lombok似乎可以正常工作,直到我去构建工件,在任何使用Lombok getter的地方都会出现这个错误。 但是,此处显示的代码没有错误: 我启用了注释处理,而lombok是一个依赖项。我似乎不明白为什么会这样,

  • 我在gradle项目中使用lombok,希望创建一个jar文件,但每次我执行jar任务(无论是在控制台还是eclipse ide中触发)时,我都会发现错误,我的lombok导入在我使用lombok注释的类中找不到。输出示例: 搜索了一段时间后,我发现有一个适用于gradle和lombok的插件,但在使用较新的gradle版本编译时并不真正需要。我的gradle版本是3.4.1和lombok 1.6

  • 问题内容: 我在基于龙目岛的POJO中有一个自定义设置器: 但是当我使用Lombok生成的生成器时: 我的自定义设置程序未调用,因此密码未编码。这让我很难过。 当我直接使用它时,当然会调用我的自定义设置器: 如何使Lombok的生成器使用我的自定义设置器? 问题答案: 根据文档:仅自己定义足够的框架。特别是,Lombok将生成一个class ,反映该字段的字段和构建器方法,您可以自己提供其中的任何