자동 구성을 중단하지 않고 Spring-Boot에서 MappingMongoConverter(setMapKeyDotReplacement)를 사용자 지정하는 방법은 무엇입니까?
Spring-Boot-Application(1.3.2) 내에서 를 사용자 지정하려면 어떻게 해야 합니까?RELEASE) 스프링 데이터에 의해 자동으로 구성되는 몽고 스탭을 변경하지 않고도?
현재 솔루션은 다음과 같습니다.
@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;
}
}
이 길로 가는 게 맞나요, 아니면 이걸로 물건을 부수는 건가요?
또는 지도 키닷 대체를 설정하는 더 간단한 방법이 있습니까?
그것이 올바른 방법입니다.자동 구성됨MappingMongoConverter
주석이 달렸습니다.@ConditionalOnMissingBean(MongoConverter.class)
그래서 자신의 것을 추가하는 것.MappingMongoConverter
bean은 자동 구성이 사용자 지정 변환기에 맞게 취소되도록 합니다.
한 가지 사소한 수정 사항: 전화할 필요가 없습니다.mongoConverter.afterPropertiesSet()
컨테이너가 당신을 위해 그것을 부를 것입니다.
짧은 버전도 있습니다.
@Autowired
void setMapKeyDotReplacement(MappingMongoConverter mappingMongoConverter) {
mappingMongoConverter.setMapKeyDotReplacement("_");
}
Spring이 인식할 수 있도록 클래스에 입력해야 합니다. 예를 들어, 클래스에 주석을 달아야 합니다.@Configuration
최근 버전의 스프링 부트에서 이 문제를 발견했습니다.귀하의 접근 방식이 저에게 효과가 없거나 승인된 답변입니다. 제 부트 앱이 사용자 지정 매핑 변환기를 무시하는 것 같습니다.
구성 클래스에서 수행한 작업은 부팅에 사용되는 MappingMongoConverter에서 자동으로 연결한 다음 setMapKeyDotReplacement를 설정했습니다.
@Autowired
private MappingMongoConverter mongoConverter;
// Converts . into a mongo friendly char
@PostConstruct
public void setUpMongoEscapeCharacterConversion() {
mongoConverter.setMapKeyDotReplacement("_");
}
우리는 Mongo 템플릿 내부의 기본 매핑 변환기를 사용하여 필요한 것을 변경할 수 있습니다.
/**
* <p>
* Gets default mapping converted that can be overiden based on the need.
* This is the default mapping used inside mongo template when no custom converter is passed
* </p>
* @param factory
* @return
*/
private static MongoConverter getDefaultMongoConverter(MongoDbFactory factory) {
DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory);
MongoCustomConversions conversions = new MongoCustomConversions(Collections.emptyList());
MongoMappingContext mappingContext = new MongoMappingContext();
mappingContext.setSimpleTypeHolder(conversions.getSimpleTypeHolder());
mappingContext.afterPropertiesSet();
MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mappingContext);
converter.setCustomConversions(conversions);
converter.setCodecRegistryProvider(factory);
converter.afterPropertiesSet();
return converter;
}
@Bean
@Primary
public MongoTemplate mongoTemplate() {
MappingMongoConverter mappingMongoConverter = (MappingMongoConverter) getDefaultMongoConverter(mongoDbFactory());
// custom key to map dot (.) with "__mongo_key__" when saving and replacing it with dot (.) again when it
// is retrieved
mappingMongoConverter.setMapKeyDotReplacement("__mongo_key__");
return new MongoTemplate(mongoDbFactory(), mappingMongoConverter);
}
언급URL : https://stackoverflow.com/questions/35598595/how-to-customize-mappingmongoconverter-setmapkeydotreplacement-in-spring-boot
'programing' 카테고리의 다른 글
Oracle 상수를 단일 테이블로 병합 (0) | 2023.07.10 |
---|---|
Spring Boot 테스트에서 트랜잭션 커밋을 강제하는 방법은 무엇입니까? (0) | 2023.07.10 |
가지고 놀만한 흥미로운 C/C++ 라이브러리는 무엇입니까? (0) | 2023.07.10 |
오래된 Git commit을 어떻게 수정합니까? (0) | 2023.07.10 |
파이썬의 클래스 상수 (0) | 2023.07.10 |