org.mapstruct не работает с базовым классом

#java #spring #spring-boot #lombok #mapstruct

#java #spring #весенняя загрузка #ломбок #mapstruct

Вопрос:

У меня есть 2 класса. Мой базовый класс:

 @Data
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
public class BaseRequest {

   @NotNull
   @JsonProperty("dateTransaction")
   private String dateTransaction;

   @NotNull
   @JsonProperty("hourTransaction")
   private String hourTransaction;

}
  

И мой другой класс. Этот класс расширяет класс BaseRequest .

 public class AddClass extends BaseRequest {

   @Setter
   @Getter
   private String additionalData60;

}
  

И когда я пытаюсь создать mapper для приведения моего addClass к OtherClass:

 @Component
@Mapper(componentModel = "spring", uses = {})
public interface OtherMapper{

   @Mappings({
        @Mapping(source = "hourTransaction", target = "timeTransaction"),
        @Mapping(source = "dateTransaction", target = "dateTransaction"),
        @Mapping(source = "additionalData60", target = "additionalData60"),
   })
   OtherClass toOtherClass(AddClass addClass);

}
  

Когда я запускаю свою сборку, я получил эту ошибку:

Ошибка:(22,13) java: в исходных параметрах не существует свойства с именем «dateTransaction». Вы имели в виду «null»?

Комментарии:

1. Что произойдет, если вы добавите получатели вручную вместо использования Lombok?

Ответ №1:

MapStruct работает без проблем с Lombok.

Однако, если вы обновились до Lombok 1.18.16 в соответствии с списком изменений Lombok, вам необходимо добавить

lombok-mapstruct-binding

В Gradle:

 annotationProcessor "org.projectlombok:lombok-mapstruct-binding:0.1.0"
  
 <path>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok-mapstruct-binding</artifactId>
    <version>0.1.0</version>
</path>