2016-02-24 12 views
7

Jak mogę dostosować MappingMongoConverter w mojej aplikacji Spring-Boot (1.3.2.RELEASE) bez zmiany żadnego z mongo-stuff, który jest automatycznie skonfigurowany przez dane sprężyny?Jak dostosować MappingMongoConverter (setMapKeyDotReplacement) w Spring-Boot bez przerywania automatycznej konfiguracji?

Moje obecne rozwiązanie jest:

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

Czy to właściwa droga czy mogę złamać pewne rzeczy z tym?
A może istnieje jeszcze prostszy sposób ustawienia parametru mapKeyDotReplacement?

Odpowiedz

5

To jest właściwy sposób, aby to zrobić. Automatycznie skonfigurowany MappingMongoConverter jest opatrzony komentarzem @ConditionalOnMissingBean(MongoConverter.class), więc dodanie własnej fasoli MappingMongoConverter spowoduje cofnięcie autokonfiguracji na korzyść niestandardowego konwertera.

Jedna drobna korekta: nie ma potrzeby, aby dzwonić pod numer mongoConverter.afterPropertiesSet(). Kontener wywoła to dla ciebie.

6

Znalazłem ten problem w najnowszej wersji wiosennego startu. Twoje podejście nie zadziałało ani dla mnie, ani dla zaakceptowanej odpowiedzi ... moja aplikacja do bootowania zdawała się ignorować mój niestandardowy konwerter mapowania.

Co zrobiłem w klasie konfiguracyjnej, którą wykonałem automatycznie w MappingMongoConverter, którego używa boot, a następnie ustawiłem setMapKeyDotReplacement na tym.

@Autowired 
private MappingMongoConverter mongoConverter; 

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

Nie ma potrzeby sprawdzania zerowej jak nie określono zależność ('mongoConverter') jako opcjonalne – LoganMzz

+0

Dzięki, edytowane moją odpowiedź. –

Powiązane problemy