Map a collection with parameter with mapstruct

I don't think it is possible. At least not that way. Problem is that you prepare interface/abstract class - and rest is done by the engine. And that engine expects methods with one parameter... There are decorators, but they go the same way. I would try to inject language. Create bean, mark it as session scoped, and find out. With Spring, you would use ScopedProxyMode for that... Not sure how that goes with CDI.

Other option is more workaround, then solution - maybe that AlertConfigAction can pass that information?


What you describe is not possible (yet). Could you open a feature request in our issue tracker? We should provide means of denoting parameters as some sort of "context" which is passed down the call stack.

As a work-around for the time being, you might take a look at using a ThreadLocal which you set before invoking the mapping routine and which you access in your after-mapping customization. It's not elegant - and you need to make sure to clean up the thread local to avoid memory leaks - but it should do the trick.


I know that this question is quiet old, but I run into this issue, and starting at version 1.2 of mapstruct you can resolve it using @Context

So declaring the mapping for the list need to be like this :

public abstract ArrayList<AlertConfigActionTO> mapList (List<AlertConfigAction> actions, @Context Locale userLanguage);

Now, you juste need to add another non abstract mapping like this :

public AlertConfigActionTO mapConcrete (AlertConfigAction action, @Context Locale userLanguage){
      return map (action, userLanguage);
}

Tags:

Java

Mapstruct