Ответ
Маппер (Mapper) — это компонент, ответственный за преобразование данных между различными представлениями объектов, чаще всего между сущностью предметной области (Entity) и объектом передачи данных (DTO). Его цель — изолировать шаблонный код преобразования полей.
Зачем это нужно?
- Изоляция слоёв: Слой контроллеров/API работает с DTO, а слой persistence — с Entity. Маппер — это «буфер» между ними.
- Безопасность: Исключаются лишние поля (например,
@OneToMany-коллекции или хэши паролей) при отправке клиенту. - Упрощение кода: Автоматизация ручного копирования полей через
get/set.
Пример объявления маппера с использованием MapStruct:
@Mapper(componentModel = "spring") // Интеграция со Spring для инъекции
public interface UserMapper {
// MapStruct сгенерирует реализацию на этапе компиляции
UserDTO toDto(User entity);
User toEntity(UserDTO dto);
// Можно описывать кастомную логику для сложных полей
default String fullNameToDto(UserName name) {
return name.getFirstName() + " " + name.getLastName();
}
}
Использование в сервисе:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public UserDTO getUser(Long id) {
User entity = userRepository.findById(id);
return userMapper.toDto(entity); // Преобразование Entity -> DTO
}
}
Популярные библиотеки: MapStruct (высокая производительность, компиляция), ModelMapper (рефлексия, проще в настройке), Orika.