MapStruct @MappingTarget генерирует пустой метод - PullRequest
1 голос
/ 10 октября 2019

Иметь целевой тип, сформированный Ломбоком:

@Data
@Builder
class Target {
   private final String a;
}

и иметь DTO:

@Value
@Builder
class DTO {
   private final String a;
}

Mapper:

@Mapper(componentModel = "spring")
interface Mapper {
    void update(DTO dto, @MappingTarget Target target);
}

Но когда я компилирую(видел что-то связанное с JDK 11, и да, в моем случае это 11), скомпилированный метод пуст:

public void update(DTO source, Target target) {
   if (source == null) {
       return;
   }
}

И это относится только к MappingTarget. Использование обычных методов Mapping метода createFromDTO работает корректно.

MapStruct 1.3.0

1 Ответ

1 голос
/ 10 октября 2019

Ну, это оказалось Lombok + приватный финал.

Mapper определенно хочет, чтобы Lombok @Data был указан вместо @Value (думал, что @Builder будет использоваться MapStruct),и, как следствие, необходимо удалить final из полей, которые необходимо было обновить.

Странно то, что это было сделано с помощью "Google, ошибка и повторите попытку" (плюс очистка вручнуюout каталог из проекта при каждой попытке, так как MapStruct игнорировал эти изменения), в то время как MapStruct никогда не выдавал предупреждение (не было объявлено никаких флагов для игнорирования предупреждений или ошибок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...