Jag hittade äntligen en lösning på detta. Förmodligen inte det bästa alternativet, men fungerar.
Det jag gjorde var att ta bort omvandlaren från String
till ObjectId
den där MongoTemplate
använder genom QueryMapper
. På så sätt skapade jag följande Mongo-omvandlare:
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();
}
});
}
}
Och sedan skickade jag implementeringen av omvandlaren till 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>
På det här sättet, när man försöker konvertera från String till ObjectId, skapar det ett undantag och det gör det inte. Observera att du förmodligen bara kan ta bort omvandlaren från conversionService
.