spring boot - microservicios - ¿Cómo personalizar MappingMongoConverter(setMapKeyDotReplacement) en Spring-Boot sin romper la configuración automática?
microservicios spring boot pdf (2)
Esa es la forma correcta de hacerlo. El MappingMongoConverter
se anota con @ConditionalOnMissingBean(MongoConverter.class)
, por lo que agregar su propio bean MappingMongoConverter
hará que la configuración automática retroceda a favor de su convertidor personalizado.
Una corrección menor: no es necesario que llame a mongoConverter.afterPropertiesSet()
. El contenedor lo llamará por ti.
¿Cómo podría personalizar el MappingMongoConverter
dentro de mi Spring-Boot-Application (1.3.2.RELEASE) sin cambiar ninguno de los mongo-cosas que se autoconfiguran con spring-data?
Mi solución actual es:
@Configuration
public class MongoConfig {
@Autowired
private MongoDbFactory mongoFactory;
@Autowired
private MongoMappingContext mongoMappingContext;
@Bean
public MappingMongoConverter mongoConverter() throws Exception {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoFactory);
MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mongoMappingContext);
//this is my customization
mongoConverter.setMapKeyDotReplacement("_");
mongoConverter.afterPropertiesSet();
return mongoConverter;
}
}
¿Es esta la manera correcta o rompo algunas cosas con esto?
¿O hay incluso una manera más simple de establecer mapKeyDotReplacement?
Me he encontrado con este problema en la última versión del arranque de primavera. Su enfoque no funcionó para mí o la única respuesta ... mi aplicación de arranque parecía ignorar mi convertidor de asignación personalizada.
Entonces, lo que hice en la clase de configuración me conecté automáticamente en el MappingMongoConverter que usa el arranque y luego establecí el setMapKeyDotReplacement en eso.
@Autowired
private MappingMongoConverter mongoConverter;
// Converts . into a mongo friendly char
@PostConstruct
public void setUpMongoEscapeCharacterConversion() {
if(mongoConverter != null) {
mongoConverter.setMapKeyDotReplacement("_");
}
}