json 如何为同一个ModelMapper使用不同的类型Map

qij5mzcb  于 2023-03-04  发布在  其他
关注(0)|答案(2)|浏览(145)

我正在使用ModelMapper将实体转换为dto,但我们有一个要求,即多个消费者将使用相同的端点,因此,我们必须根据消费者限制字段。
例如:

Consumer 1 -> fullName, aadharNo, other details...
Consumer 2 -> fullName, passportNo, other details...
Consumer 3 -> fullName, drivingLicenceNo
Consumer 4-> All fields

public class Student {
    private String fullName;
    private String aadharNo;
    private String passportNo;
    private String drivingLicenceNo;
    private String age;
    private String schoolName;
    private String collegeName;
    private String grade;
    private String schoolMark;
}

public class StudentDto {
    private String fullName;
    private String aadharNo;
    private String passportNo;
    private String drivingLicenceNo;
    private String age;
    private String schoolName;
    private String collegeName;
    private String grade;
    private String schoolMark;
}

我尝试过为同一个模型Map器使用多个typeMap,但是一旦在modelmapper中定义了typeMap,就无法覆盖它。
属性Map示例:

PropertyMap<Student , StudentDto> skipModifiedFieldsMap = new PropertyMap<Student , StudentDto>() {
      protected void configure() {
         //skip().setAadharNo(null);
     }
   };

你能不能建议一些好的方法来实现它。任何库都可以。

mfpqipee

mfpqipee1#

您是否尝试使用条件Map?
这将允许您为不同的使用者创建不同的条件,并相应地Map。

xv8emn3q

xv8emn3q2#

可以通过使用typeMapName来实现所需的行为
配置命名Map

modelMapper.createTypeMap(Student.class, StudentDto.class, "Consumer1")
  .addMappings(new PropertyMap<>() {
                @Override
                protected void configure() {
                    skip(destination.getDrivingLicenceNo());
                }
   });

modelMapper.createTypeMap(Student.class, StudentDto.class, "Consumer2")
  .addMappings(new PropertyMap<>() {
                @Override
                protected void configure() {
                    skip(destination.getPassportNo());
                }
   });

使用命名Map

modelMapper.map(student, StudentDto.class, "Consumer1");
modelMapper.map(student, StudentDto.class, "Consumer2");

遗憾的是,ModelMapper user manual中未提及此功能

相关问题