2016-02-24 93 views
7

Come posso personalizzare lo MappingMongoConverter all'interno della mia Spring-Boot-Application (1.3.2.RELEASE) senza modificare alcuna delle cose di mongo che è stata configurata automaticamente da spring-data?Come personalizzare MappingMongoConverter (setMapKeyDotReplacement) in Spring-Boot senza interrompere la configurazione automatica?

mia soluzione attuale è:

@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; 
    } 
} 

È questo il modo giusto o devo rompere alcune cose con questo?
Oppure esiste anche un modo più semplice per impostare mapKeyDotReplacement?

risposta

5

Questo è il modo giusto per farlo. Lo MappingMongoConverter configurato automaticamente è annotato con @ConditionalOnMissingBean(MongoConverter.class), quindi l'aggiunta del proprio bean MappingMongoConverter causerà l'annullamento della configurazione automatica a favore del proprio convertitore personalizzato.

Una piccola correzione: non è necessario chiamare mongoConverter.afterPropertiesSet(). Il contenitore lo chiamerà per te.

6

Ho incontrato questo problema nell'ultima versione di avvio di primavera. Il tuo approccio non ha funzionato per me o la risposta accettata ... la mia app di avvio sembrava ignorare il mio convertitore di mappatura personalizzato.

Quindi quello che ho fatto nella classe di configurazione che ho creato nel MappingMongoConverter che utilizza l'avvio e quindi impostare setMapKeyDotReplacement su quello.

@Autowired 
private MappingMongoConverter mongoConverter; 

// Converts . into a mongo friendly char 
@PostConstruct 
public void setUpMongoEscapeCharacterConversion() { 
    mongoConverter.setMapKeyDotReplacement("_"); 
} 
+1

Non c'è bisogno per il check null come non è stato specificato dipendenza ('mongoConverter') come optional – LoganMzz

+0

Grazie, modificato la mia risposta. –

Problemi correlati