Comments (4)
In a broader sense, the question is asking about @DelegatingConverter
with additional @Context
parameters. You're right, this is a simple omission. I'll include it in the next release.
from mapstruct-spring-extensions.
Great to hear! Do you already have an idea when the next release will be available that contains this feature?
I'm asking because we are currently working on a bigger innovation project. Does ist make sense to wait oder would you think that it will take a longer time? In this case we would have to look for a workaround.
from mapstruct-spring-extensions.
Sorry, looking at this again I just realised that I have to retract my previous response. Your base convert
method doesn't conform to Spring's standard, so the @DelegatingConverter
cannot work in this scenario anyway. If you want to use @Context
objects, you can't have the Mapper extend the Converter
interface.
This is a known limitation resulting from Spring's narrower definition of a Converter
. MapStruct's Mappers are more liberal here.
from mapstruct-spring-extensions.
Hello,
I am trying to use spring ConversionService
with a generic custom Converter
including CycleAvoidingMappingContext
like below.
- If i use
DelegatingConverter
in this customConverter
TToSConverter is generated even if there is noMapper
annotation. - If i use
DelegatingConverter
in subclasses, as described twallmey, it work but only without usingContext
annotation. Maybe it will by usingBaseMapper
insteadConverter
as interface will generating delegate.
public interface BaseMapper<S, T> extends Converter<S, T> {
@Nullable
T convert(@NonNull S source, @Context CycleAvoidingMappingContext context);
@Nullable
@Override
@Named("baseConvert")
default T convert(@NonNull S source) {
return convert(source, new CycleAvoidingMappingContext());
}
@DelegatingConverter // <--- This generate code below
@InheritInverseConfiguration
S invertConvert(T source);
}
Unwanted TToSConverter is generated
@Component
public class TToSConverter implements Converter<T, S> {
private BaseMapper delegateMapper;
public TToSConverter(@Autowired final BaseMapper delegateMapper) {
this.delegateMapper = delegateMapper;
}
@Override
public S convert(final T source) {
return delegateMapper.invertConvert(source);
}
}
EDIT:
I resolved the first point by adding a filter before the DelegatingConverterDescriptor
creation in processor:
delegatingConverterDescriptors =
annotations.stream()
.filter(ConverterMapperProcessor::isDelegatingConverterAnnotation)
.map(roundEnv::getElementsAnnotatedWith)
.flatMap(Set::stream)
.map(ExecutableElement.class::cast)
// Do not generate delegate without Mapper annotation on class
.filter(annotatedMethod -> annotatedMethod.getEnclosingElement().getAnnotationMirrors().stream().anyMatch(x -> x.getAnnotationType().toString().equals(MAPPER)))
.map(annotatedMethod -> new DelegatingConverterDescriptor(annotatedMethod, processingEnv))
.collect(toList());
I am creating a new issue for the second part (I can't process the DelegatingConverter by inheritance)
from mapstruct-spring-extensions.
Related Issues (20)
- Allow inherited DelegatingConverter to be processed HOT 1
- Not auto register converters after manually create a ConversionService bean. HOT 14
- Support SpringBoot3 HOT 1
- maven package jar but no class file in jar HOT 2
- Java version requisite is 11 ?
- Java version requisite is 11 ? HOT 2
- how can i use "Inverse mappings" HOT 1
- Problem of defining parent-child JPA mapping. HOT 3
- maven Compilation failed [JDK20 MAVEN3.9.2 ] javax.annotation.processing.Processor: Provider org.mapstruct.extensions.spring.converter.ConverterMapperProcessor could not be instantiated HOT 2
- ConversionServiceAdapterGenerator does not respect mapstruct.suppressGeneratorTimestamp
- Combining various default starters can result in multiple `ConversionService`s being in the `ApplicationContext`.
- How to inject Spring CustomComponent in Mapper interface? HOT 2
- Compiler Error with Qualified Mapping and Custom Converter - Duplicate Method Generation HOT 6
- Provide a ConversionService bean if missing HOT 7
- Generate additional delegating mappers for @InheritInverseConfiguration HOT 5
- Name collision with same class name in different packages HOT 2
- 'No converter found' when injection ConversionService into Spring Service. / indirect reference to ConversionService HOT 6
- spring-beans vulnerability CVE-2022-22965 HOT 4
- Provide mechanism for adding annotations to generated code HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mapstruct-spring-extensions.