Utilisation de Mapstructeur, comment puis-je créer une mappeuse qui planerait automatiquement tous les champs sauf un (ou deux, trois, etc.) qui devraient être transmis par une logique de mappage personnalisée?
@AfterMapping
public void mapSomeString(MyEntity entity, MyEventPayload payload) {
// do fancy stuff here
}
3 Réponses :
Avez-vous regardé Voici l'exemple de DOCS: P> expressions code> de maptructeur?
@Mapping(target = "timeAndFormat",
expression = "java( new org.sample.TimeAndFormat( s.getTime(), s.getFormat() ) )")
Oui, mais je refuse de faire ça. ;-) `@Aftermapping est la bonne réponse imo. Sauf si je manque une autre fonctionnalité. Merci!
Je pense que vous envisagez des qualificatifs de la méthode de mappage, je vais me regarder répondre
J'ai fini par utiliser @AfterMapping E.g.:
@AfterMapping public void mapSomeString(MyEntity entity, MyEventPayload payload) { // do fancy stuff here }
Si vous souhaitez mapper un seul champ de manière spécifique, vous pouvez utiliser Sélection de méthodes de mappage basées sur des qualificatifs .
Ceci ressemble à quelque chose comme p> Vous pouvez également utiliser Ceci ressemble à: p> mappage # qualifiéby code> et construire votre propre qualificatif code> (
org.mapstruct.qualifier code>) annotation. p>
@Qualifier // org.mapstruct.Qualifier
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.CLASS)
public @interface MyFancyMapping {
}
@Mapper
public interface MyEntityMapper {
@Mapping(target = "someString", qualifiedBy = MyFancyMapping.class)
MyEventPayload toEventPayload(MyEntity entity);
@MyFancyMapping
default String mapSomeString(String value) {
return value + " custom mapping ";
}
}
Merci. J'ai utilisé @Aftermapping code> mais va vérifier ces autres options également.