Konečně jsem na to našel řešení. Pravděpodobně to není nejlepší možnost, ale funguje.
Co jsem udělal, bylo odstranění převodníku z String
na ObjectId
že MongoTemplate
používá prostřednictvím QueryMapper
. Tímto způsobem jsem vytvořil následující konvertor 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 pak jsem tuto implementaci převodníku předal 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>
Tímto způsobem při pokusu o převod z řetězce na ObjectId vyvolá výjimku a neudělá to. Vezměte prosím na vědomí, že pravděpodobně stačí odebrat převodník z conversionService
.