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

MapStruct按原样映射嵌套bean

农存
2023-03-14

我的问题是如何将对象包含嵌套对象映射到DTO,而不是嵌套对象的值,例如,如果有2个这样的类:

    public class TestClass {
        @Id
        private String id;

        @Field("field1")
        private String field1;

        @Field("field2")
        private Long field2;

        @Field("nestedClass")
        private NestedClass;

        //getter & setter 
    }

    public class NestedClass {
    //fields and getter and setter for it
    }

    DTO classes looks like :

    public class TestClassDTO {
        private String id;
        private String field1;
        private Long field2;
        private NestedClassDTO ;

        //getter & setter 
    }

    public class NestedClassDTO {
        //fields and getter and setter for it
    }


    @Mapper(componentModel = "spring", uses = {})
    public interface TestClassMapper {

        TestClassDTO TestClassToTestClassDTO(TestClass TestClass);

        TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);

        NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);

        NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);

        }

调用TestClassDTOToTestClass()并发送TestClassDTO包含NestedClassDTO.之后。。返回的TestClass为空NestedClass。。有没有可能不用自己编写地图绘制程序来绘制地图?

共有2个答案

东方建修
2023-03-14

如果我理解正确,您希望有一个映射方法,它不会将TestClassDTO中的nestedClass字段映射(忽略)。你可以使用@Mapping#ignore

您的映射器将如下所示:

@Mapper(componentModel = "spring", uses = {})
public interface TestClassMapper {

    TestClassDTO TestClassToTestClassDTO(TestClass TestClass);

    @Mapping(target = "nestedClass", ignore = true)
    TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);

    NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);

    NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);

    }

如果出于某种原因,您希望显式地将值设置为null,请查看此问题的答案

高山
2023-03-14

我找到了:)

映射器类应该像这样使用嵌套类:

    @Mapper(componentModel = "spring", uses = {NestedClassMapper.class})
    public interface TestClassMapper {

        TestClassDTO TestClassToTestClassDTO(TestClass TestClass);

        TestClass TestClassDTOToTestClass(TestClassDTO TestClassDTO);

        NestedClass NestedClassDTOToNestedClass(NestedClassDTO NestedClassDTO);

        NestedClassDTO NestedClassToNestedClassDTO(NestedClass NestedClass);

    }
 类似资料:
  • 我尝试使用MapStruct编写映射器类,如下所示: 目前它显示了“未知属性”“customer.customerid”和“usertypes.usertype.userid”等错误。有人能帮我用MapStruct映射所有这些元素吗? 问题2:我们如何绘制跟踪图?1)customerId usertypes->user->userid 2)pdtPrice offers->OffersType->

  • 有人能帮忙填写上面的评论部分吗?或者是否有其他选项来映射这些对象? 编辑:我尝试了下面的解决方案,但是接口实现类本身发生了变化。

  • 我正在尝试映射我的遗留API对象(我无法更改它),该对象具有嵌套的原始类型属性。列表的元素与DTO列表的元素不兼容,应显式映射为嵌套。不幸的是,MapStruct似乎认为原始与所有类型化列表兼容,并忽略了我试图指定的任何映射,而生成的代码不能正常工作,随后在序列化程序的某个地方产生错误。 我的API对象具有嵌套的原始类型列表: 我的DTO对象具有DTO值类型元素的泛型类型列表: ...但MapSt

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...

  • 我使用MapStruct来映射我的实体,我使用Mockito来嘲笑我的对象。 我想用MapStruct测试一个包含映射的方法。问题是嵌套映射器在我的单元测试中总是为null(在应用程序中工作得很好)

  • 假设我有这些实体: null