У меня есть класс DTO, который расширяет класс spring-hateoas
ResourceSupport
. UserMinimalDto
- это DTO для User
объекта.
Итак, для создания классов сопоставления я использую mapStruct.
@Data //from lambok
@EqualsAndHashCode(callSuper=false)
public class UserMinimalDto extends ResourceSupport {
String firstName;
String lastName;
String email;
String uniqueId;
String profilePicUrl;
}
Я использую ResourceSupport
, чтобы добавить ссылки ненависти к ответу контроллера.
Интерфейс Mapper
@Mapper
public interface UserMinimalMapper {
UserMinimalMapper INSTANCE = Mappers.getMapper(UserMinimalMapper.class) ;
UserMinimalDto entityToDto(User user);
User dtoToEntity(UserMinimalDto userMinimalDto);
}
Но когда я запускаю mvn clean install
в проекте, я сталкиваюсь с ошибкой компиляции
Не удается сопоставить свойство org.springframework.hateoas.Link id "java.lang.Integer id". Рассмотрите возможность объявления / реализации метода сопоставления: «java.lang.Integer map (org.springframework.hateoas.Link value)».
Это потому, что mapStruct
пытается сопоставить поля ResourceSupport
. Работает, если:
- Я удаляю extends ResourceSupport из UserMinimalDto
- Удаляю dtoToEntity (UserMinimalDto userMinimalDto); из интерфейса картографа
Какая конфигурация указывает mapStruct
не отображать поля суперкласса?
BaseEntity
? Интерфейс / класс, реализованный всеми моими классами сущностей? или классы DTO? 24.03.2019ResourceSupport
24.03.2019config
? (поскольку этот подход не масштабируется). Альтернативный подход может использовать@AfterMapping
, но он затрудняет чтение сгенерированного сопоставителя, поскольку нам нужно прыгать вперед и назад, чтобы увидеть сопоставления. 14.05.2020