1

我的问题是如何将包含嵌套对象的对象按原样映射到 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 contains NestedClassDTO .. 它返回 TestClass 与 null NestedClass .. 是否可以在不编写我自己的映射器的情况下映射它?

上海

4

2 回答 2

2

我找到了 :)

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

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

    }
于 2017-04-16T18:16:32.867 回答
0

如果我对您的理解正确,您希望有一个不会映射(忽略)nestedClass来自TestClassDTO. 您可以使用@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然后看看这个问题的答案

于 2017-04-16T15:46:17.840 回答