Ich habe nächste Klassen:
Mapper
%Vor%Entität:
%Vor%DTO:
%Vor%Und Methode von Spring Service Klasse, wo ich diese Zuordnung verwenden:
%Vor%Wenn ich obige Methode benutze, sehe ich die nächste Ausnahme:
FEHLER [DispatcherServlet] :? - Servlet.service () für Servlet [dispatcherServlet] im Kontext mit path [] hat Ausnahme [Handler Verarbeitung fehlgeschlagen; verschachtelte Ausnahme ist java.lang.ExceptionInInitializerError] mit der Ursache java.lang.ClassNotFoundException: dto.DeviceTokensMapperImpl
Warum benötigen Mapper Implementierungsklassen? Könnte bitte jemand beraten? Danke.
MapStruct generiert Code zur Kompilierzeit, und der Aufruf von Mappers.getMapper(DeviceTokensMapper.class);
sucht nach der generierten Implementierung der Mapper-Schnittstelle. Aus irgendeinem Grund scheint es in Ihrer Bereitstellungseinheit (WAR etc.) Zu fehlen.
Übrigens. Wenn Sie mit Spring als Ihrem DI-Container arbeiten, können Sie @Mapper(componentModel="spring")
verwenden, und Sie können Mapper-Instanzen über die Abhängigkeitsinjektion abrufen, anstatt die Mappers
factory zu verwenden.
Wenn Sie maven verwenden, müssen Sie die mapstruct-Prozessor-Abhängigkeit wie folgt hinzufügen:
%Vor% Ich habe das gleiche Problem in meinem Projekt mit Gradle getroffen. Und ich ersetze die build.gradel
von
bis
%Vor%Dann bau sauber und baue. Es funktioniert jetzt!
Ich bin auf dieses Problem gestoßen, weil ich ./gradlew clean build
( gradlew.bat
für Windows) nach dem Erstellen / Bearbeiten der Mapper-Klasse oder verwandten Klassen nicht ausgeführt habe.
Auch etwas, das ich gefunden habe, war nützlich, da ./gradlew clean build -x test
funktioniert, aber nicht den ganzen Test, was in meinem Fall viel war.