0
votes

Automatiquement tous les champs sauf un, qui devrait être transmis à travers une autre fonction

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?

mappeuse forte > P>

@AfterMapping
public void mapSomeString(MyEntity entity, MyEventPayload payload) {
    // do fancy stuff here
}


0 commentaires

3 Réponses :


0
votes

Avez-vous regardé expressions code> de maptructeur?

Voici l'exemple de DOCS: P>

@Mapping(target = "timeAndFormat",
     expression = "java( new org.sample.TimeAndFormat( s.getTime(), s.getFormat() ) )")


2 commentaires

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



0
votes

J'ai fini par utiliser @AfterMapping E.g.:

@AfterMapping
public void mapSomeString(MyEntity entity, MyEventPayload payload) {
    // do fancy stuff here
}


0 commentaires

1
votes

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> xxx pré>

Vous pouvez également utiliser mappage # qualifiéby code> et construire votre propre qualificatif code> ( org.mapstruct.qualifier code>) annotation. p>

Ceci ressemble à: 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 ";
    }
}


1 commentaires

Merci. J'ai utilisé @Aftermapping mais va vérifier ces autres options également.