W końcu znalazłem na to rozwiązanie. Prawdopodobnie nie najlepsza opcja, ale działa.
Usunąłem konwerter z String
do ObjectId
ten MongoTemplate
używa przez QueryMapper
. W ten sposób stworzyłem następujący konwerter Mongo:
public class CustomMongoConverter extends MappingMongoConverter {
public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
super(mongoDbFactory, mappingContext);
conversionService.addConverter(new Converter<String, ObjectId>() {
@Override
public ObjectId convert(String source) {
throw new RuntimeException();
}
});
}
}
A potem przekazałem tę implementację konwertera do MongoTemplate
:
<bean id="mongoConverter" class="com.abcompany.model.repositories.utils.CustomMongoConverter">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg>
<bean class="org.springframework.data.mongodb.core.mapping.MongoMappingContext"/>
</constructor-arg>
</bean>
<bean class="org.springframework.data.mongodb.core.MongoTemplate" id="mongoTemplate">
<constructor-arg ref="mongoDbFactory"/>
<constructor-arg ref="mongoConverter"/>
</bean>
W ten sposób podczas próby konwersji z String na ObjectId zgłasza wyjątek i tego nie robi. Pamiętaj, że prawdopodobnie możesz po prostu usunąć konwerter z usługi conversionService
.