有没有一种方法可以提取Mapstruct映射?

时间:2020-08-27 10:03:08

标签: java mapstruct

让我们说一个基本的例子是将一个对象映射到另一个对象,我需要在Mapper类中声明该映射。

为进行验证,我可能想记住原始字段名称及其对应的映射。

是否可以使用mapstruct进行操作,而不必“手动”进行映射

这是我期望的例子。

public class PersonDemo {

    public static void main(String[] args) {
        final PersonMapper mapper = Mappers.getMapper(PersonMapper.class);
        Person person = mapper
            .toPerson(new PersonDto()
                .setFirstName("John")
                .setName("Doe"));

        System.out.println(person);

        System.out.println("Expected " + toPersonDesc("firstName") + " to be firstName");
        System.out.println("Expected " + toPersonDesc("name") + " to be lastName");
    }

    @Mapper
    public interface PersonMapper {
        @Mapping(target = "lastName", source = "name")
        Person toPerson(PersonDto dto);

    }

    //expected method. to be generated somehow from the mapping.
    static String toPersonDesc(String fieldName) {
        switch (fieldName) {
            case "name": return "lastName";
            case "firstName": return "firstName";
        }
        return null;
    }

    @Data
    @Accessors(chain = true)
    public static class Person {

        private String lastName;
        private String firstName;
    }

    @Data
    @Accessors(chain = true)
    public static class PersonDto {

        private String name;
        private String firstName;
    }
}

1 个答案:

答案 0 :(得分:1)

使用Mapstruct不可能。还有一个与您类似的问题:How to provide MapStruct Mapping annotation mapping meta data at runtime。那里的答案描述了解决该问题的“某种”方法,但是它非常有限-它只是从value_not_nan = tf.dtypes.cast(tf.math.logical_not(tf.math.is_nan(value)), dtype=tf.float32) tf.math.multiply_no_nan(value, value_not_nan) 批注中抓取信息(不支持隐式映射)。

但是拥有此功能将非常有用-您应该向Mapstruct团队提出此功能。