Jak zmapować cały obiekt w custom metod do mapowania pola w MapStruct?

0

Witam ! Pracuję z MapStruct i potrzebuję zmapować AssetPrototype i zrobić custom metodę zwracającą pole Attachment... Wszystko byłoby git, gdyby jeżeli Mapper pobierał w argumentach custom metody sam obiekt AssetPrototype, a nie tylko Attachment bo tak, używam tylko i wyłącznie obiekt Attachment, jakoś operuję tylko w jednym miejscu potrzeubuje id, asstetPrototype, w którym się znajduje Attachment, dlatego wali error.

Jak widać w ostatniej metodzie dostaję id z obiekta AssetPrototype, właśnie dlatego wali error, bo w argumentach musi się znajdować Attachment, a nie AssetProperty Jak można to rozwiązać?


@Mapper(componentModel = "spring")
public abstract class AssetPrototypeMapper {

    @Autowired
    protected AssetPropertiesFactory propertiesFactory;
    @Autowired
    protected FilesStore filesStore;
    @Autowired
    protected UUIDGenerator generator;

     ...
     ...

    @Mapping(source = "attachments", target = "attachable", qualifiedByName = "customAttachments")
    public abstract AssetPrototype toEntity(AssetPrototypeDocument document)

     ...
     ...

    protected BaseAttachable customAttachments(Attachment attachment) {

    }

    @Named("customAttachments")
    protected BaseAttachable customAttachments(AssetPrototypeDocument document) {
        return new BaseAttachable(filesStore,
                document.attachments == null ? new ArrayList<>() : document.attachments,
                "assetsPrototypes/" + document.id + "/attachments/", generator);
    }
     ...
     ...
}

Image 5.png

0

jak dla mnie za dużo niewiadomych, ale czasem w document nie znajduje się ten attachment? Tylko zgaduję
nie no, w document jest attachment, dopiero zauważyłem

dopisałbym jakiegoś helpera, w sensie metodę prywatną, żeby zwracała obiekt Attachment z AssetPrototypeDocument. To jedyne co mi przychodzi teraz do głowy.
Skoro masz AssetPrototypeDocument, to można wyciągnąć Attachment.

8

Porzuć tą drogę, nie warto... Serio. Napisz normalne Buildery do tych klas i sobie to ręcznie zmapuj jeśli potrzebujesz. Map struct wrzuci ci tylko tony adnotacji i śmieci w kodzie i sprawi że będzie to zupełnie nieczytelne, a na koniec i tak nie będzie działać tak jak byś chciał.

1 użytkowników online, w tym zalogowanych: 0, gości: 1