Отображение размера списка в поле int с помощью modelmapper - PullRequest
1 голос
/ 28 января 2020

Я новичок в моделимэппере. В моем проекте SpringBoot есть классы Department и Staff. У отдела класса есть список сотрудников. Используя ModelMapper, я хочу создать DepartmentDTO с полем staffCount. Я добавил классы Department и DepartmentDTO ниже. Как добиться этого отображения?

Класс отдела

public class Department {

    private Long id;
    private String departmentName;
    private Set<Staff> staffList = new HashSet<>();


    public Department(String departmentName) {
        super();
        this.departmentName = departmentName;
    }

    // getters and setters
} 

Класс DepartmentDTO

public class DepartmentDTO {

    private Long id;
    private String departmentName;
    private int staffCount = 0;

    public DepartmentDTO(String departmentName) {
        this.departmentName = departmentName;
    }

    // getters and setters

}

1 Ответ

0 голосов
/ 29 января 2020

Я нашел решение от этого поста . Я создал класс DepartmentStaffListToStaffCountConverter. И использовал его при добавлении сопоставлений в экземпляр modelmapper в файле конфигурации SpringBootApplication.

DepartmentStaffListToStaffCountConverter

public class DepartmentStaffListToStaffCountConverter extends AbstractConverter<Set<Staff>, Integer> {

    @Override
    protected Integer convert(Set<Staff> staffList) {
        if(staffList != null) {
            return staffList.size();
        } else {
            return 0;
        }
    }
}

Файл SpringBootApplication

@SpringBootApplication
public class SpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootApplication.class, args);
    }

    @Bean
    public ModelMapper getModelMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
        modelMapper.typeMap(Department.class, DepartmentDTO.class)
                   .addMappings(new PropertyMap<Department, DepartmentDTO>() {
            @Override
            protected void configure() {
                using(new DepartmentStaffListToStaffCountConverter()).map(source.getStaffList(), destination.getStaffCount());
            }
        });
        return modelMapper;
    }
}
...