MapStruct nécessite Impl classe
J'ai à côté des classes:
Mappeur
public interface DeviceTokensMapper {
DeviceTokensMapper INSTANCE = Mappers.getMapper(DeviceTokensMapper.class);
@Mappings({
@Mapping(source = "tokenName", target = "tokenName"),
@Mapping(source = "userOsType", target = "osType"),
})
DeviceTokensDTO toDeviceTokensDTO(DeviceTokens deviceTokens);
}
Entité:
@Entity
public class DeviceTokens {
@Id
@Column(name="token_name", nullable = false)
private String tokenName;
@Column(name = "os", nullable = false)
@Enumerated
private UserOSType userOsType;
public DeviceTokens() {}
public DeviceTokens(String tokenName, UserOSType userOSType) {
this.tokenName = tokenName;
this.userOsType = userOSType;
}
public String getTokenName() {
return tokenName;
}
public void setTokenName(String tokenName) {
this.tokenName = tokenName;
}
public UserOSType getUserOsType() {
return userOsType;
}
public void setUserOsType(UserOSType userOsType) {
this.userOsType = userOsType;
}
}
DTO:
public class DeviceTokensDTO {
private String tokenName;
private UserOSType osType;
public DeviceTokensDTO() {}
public DeviceTokensDTO(String tokenName, UserOSType osType) {
this.tokenName = tokenName;
this.osType = osType;
}
public UserOSType getOsType() {
return osType;
}
public void setOsType(UserOSType osType) {
this.osType = osType;
}
public String getTokenName() {
return tokenName;
}
public void setTokenName(String tokenName) {
this.tokenName = tokenName;
}
}
Et de la méthode de printemps de service classe où j'utilise cette cartographie:
@Transactional
public DeviceTokensDTO storeToken(String tokenId, UserOSType userOsType) {
DeviceTokens deviceTokens = new DeviceTokens(tokenId, userOsType);
DeviceTokens newDevice = deviceTokensRepository.save(deviceTokens);
return DeviceTokensMapper.INSTANCE.toDeviceTokensDTO(newDevice);
}
Quand je lance méthode ci-dessus, je vois l'exception suivante:
ERREUR [dispatcherServlet]:? - Servlet.service() de la servlet
[dispatcherServlet] dans le contexte de chemin [] a jeté exception [Gestionnaire
le traitement a échoué; nested exception est
java.lang.ExceptionInInitializerError] à cause de racine
java.lang.ClassNotFoundException:
dto.DeviceTokensMapperImpl
Alors pourquoi mappeur requiert la mise en œuvre de la classe? Pourrait plaire à quelqu'un conseiller?
Merci.
Comment avez-vous résolu?
OriginalL'auteur Iurii | 2015-08-10
Vous devez vous connecter pour publier un commentaire.
MapStruct génère du code lors de la compilation, et l'appel à
Mappers.getMapper(DeviceTokensMapper.class);
va chercher l'généré la mise en œuvre du mappeur de l'interface. Pour une raison quelconque, il semble manquer dans votre unité de déploiement (GUERRE...).Btw. lorsque vous travaillez avec le Printemps que votre conteneur d'injection de dépendances, vous pouvez utiliser
@Mapper(componentModel="spring")
et vous serez en mesure d'obtenir de mapper des instances via l'injection de dépendance au lieu d'utiliser leMappers
usine.Avez-vous trouvé une solution?
target/generated-sources
est vide :[J'ai mis à jour
maven-compiler-plugin
à3.6.0
alors qu'il a lancé en... c'était une ancienne version avant d'la mise à niveau de maven-compiler-plugin version 2.5.1 à 3.6.1 aidé
OriginalL'auteur Gunnar
Avez-vous des deux mapstruct-processeur-xx et mapstruct-xx bibliothèques incluses dans votre projet?
J'ai eu le même problème et j'ai réalisé que j'avais oublié d'inclure mapstruct-processeur-xx.
OriginalL'auteur dplavcic
si vous utilisez maven, vous devez ajouter mapstruct-processeur dépendance comme suit:
OriginalL'auteur Lê văn Huy
Êtes-vous à l'aide de Maven? Si oui, alors très probablement vous avez manqué la mapstruct-de la configuration du processeur en vertu de l'maven compilateur plugin.
La bonne configuration est comme suit:
OriginalL'auteur Omtara
Dans mon cas, j'avais enveloppé
<plugin>
dans<pluginManagement>
balises pour contourner une éclipse (Mars) bug comme suitRetrait
<pluginManagement>
balises fixes pour moi.OriginalL'auteur sh87
J'ai rencontré le même problème dans mon projet avec gradle. Et je remplace le
build.gradel
de
à
Puis sh construire propre&construire. Il travaille maintenant!
OriginalL'auteur Wentao Wan
Je suis tombé sur ce problème, car je n'ai pas couru
./gradlew clean build
(gradlew.bat
pour Windows) après la création/modification de la mappeur de classe ou des classes associées.Aussi, quelque chose que j'ai trouvé était utile est
./gradlew clean build -x test
fonctionne, mais ne lancez pas tout de votre test, qui a beaucoup dans mon cas.OriginalL'auteur James
Dans votre construction.gradle ajouter
Activer l'annotation de Traitement dans votre milieu
Bonus : ajouter des plugin intellij pour mapstruct
OriginalL'auteur FBH
Si vous utilisez du Projet de lombok avec mapstruct alors vous aurez besoin de configurer à la fois sous maven compilateur plugin, comme les deux d'entre eux de générer de la source au moment de la compilation.
OriginalL'auteur Rahul Bhooteshwar