[MONGODB] 설정 MongoDB의 프로그래밍 컨버터
MONGODB설정 MongoDB의 프로그래밍 컨버터
나는 스프링 데이터 MongoDB를 함께 사용자 지정 변환기를 사용하려고 해요. 내가 프로그램을 만들려면, 그러나 나는 다음과 같은 오류가 발생합니다 :
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type org.joda.time.LocalDate to type java.lang.String
at org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:475)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:175)
at org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:154)
....
....
다음은 실패 코드입니다 :
Mongo mongo = new Mongo();
MongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, "database");
List<Converter> converters = new ArrayList<>();
converters.add(new LocalDateWriteConverter());
converters.add(new LocalDateReadConverter());
CustomConversions customConversions = new CustomConversions(converters);
MappingContext mappingContext = new SimpleMongoMappingContext();
MappingMongoConverter mappingMongoConverter = new MappingMongoConverter(mongoDbFactory, mappingContext);
mappingMongoConverter.setCustomConversions(customConversions);
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, mappingMongoConverter);
MongoDbEvent mongoEvent = new MongoDbEvent(new LocalDate(2012, 12, 8));
mongoTemplate.insert(mongoEvent);
그리고 여기 내 컨버터 클래스는 다음과 같습니다
class LocalDateReadConverter implements Converter<String, LocalDate> {
@Override
public LocalDate convert(String s) {
// Conversion code omitted.
}
}
class LocalDateWriteConverter implements Converter<LocalDate, String> {
@Override
public String convert(LocalDate localDate) {
// Conversion code omitted.
}
}
클래스는이 같은 모습을 유지하기 위해 노력하고있어 :
import org.joda.time.LocalDate;
public class MongoDbEvent {
private String id;
private LocalDate date;
public MongoDbEvent(LocalDate date) {
this.date = date;
}
public String getId() {
return id;
}
public LocalDate getDate() {
return date;
}
@Override
public String toString() {
return "MongoDbEvent{" +
"id='" + id + '\'' +
", date=" + date +
'}';
}
}
해결법
-
==============================
1.이 답변은 늦게까지 영업을위한 작은 수 있지만 난 그냥 오늘 같은 문제로 실행하고 해결책을 발견 ...
이 답변은 늦게까지 영업을위한 작은 수 있지만 난 그냥 오늘 같은 문제로 실행하고 해결책을 발견 ...
프로그래밍 방식으로 설정하려면, 당신은 당신이 그것을 사용하기 전에) MongoMappingConverter.afterPropertiesSet을 (호출해야합니다. 나는 MongoTemplate.getDefaultMongoConverter (MongoDbFactory)에 대한 코드를 읽고 이것을 깨달았다.
다음은 그 예이다 :
MappingMongoConverter converter = new MappingMongoConverter(mongoDbFactory, context); converter.setTypeMapper(mapper); converter.setCustomConversions(new CustomConversions( Arrays.asList( new TimeZoneReadConverter(), new TimeZoneWriteConverter() ) )); converter.afterPropertiesSet(); MongoTemplate template = new MongoTemplate(mongoDbFactory, converter);
-
==============================
2.그냥 머리까지. 나는 스프링 데이터 MongoDB를 1.5.1.RELEASEusing 자바 구성에 그 문제로 어려움을 겪고 있었다. 일부 클래스가 변경, 나는 내 솔루션을 게시하도록하겠습니다.
그냥 머리까지. 나는 스프링 데이터 MongoDB를 1.5.1.RELEASEusing 자바 구성에 그 문제로 어려움을 겪고 있었다. 일부 클래스가 변경, 나는 내 솔루션을 게시하도록하겠습니다.
@Configuration 주석 구성 클래스에 다음과 같은 정의를 추가 :
@Bean public Mongo mongo() throws Exception { MongoPropertiesResolver resolver = mongoResolver(); return new MongoClient(resolver.getUrl()); } @Bean public MongoDbFactory mongoDbFactory() throws Exception { return new SimpleMongoDbFactory(mongo(), "database"); } @Bean public MongoTemplate mongoTemplate() throws Exception { return new MongoTemplate(mongoDbFactory(), mongoConverter()); } @Bean public CustomConversions customConversions() { List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>(); converters.add(new TimeZoneReadConverter()); converters.add(new TimeZoneReadConverter()); return new CustomConversions(converters); } @Bean public MappingMongoConverter mongoConverter() throws Exception { MongoMappingContext mappingContext = new MongoMappingContext(); DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory()); MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mappingContext); mongoConverter.setCustomConversions(customConversions()); return mongoConverter; }
-
==============================
3.어떻게 여기에 상세하게 설명되어 사용자 정의 컨버터 MongoDB를을 사용자 정의 할 수 :
어떻게 여기에 상세하게 설명되어 사용자 정의 컨버터 MongoDB를을 사용자 정의 할 수 :
http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#mapping-configuration
내가 application.properties 구성 설정 혜택을 누릴 수 있도록 나는 기본 구성 값을 주입.
@Configuration public class MongoConfiguration extends AbstractMongoConfiguration { @Value("${spring.data.mongodb.database:test}") String database; @Value("${spring.data.mongodb.host:localhost}:${spring.data.mongodb.port:27017}") String host; @Override protected String getDatabaseName() { return database; } @Override public Mongo mongo() throws Exception { return new MongoClient(host); } @Bean @Override public CustomConversions customConversions() { List<Converter<?, ?>> converterList = new ArrayList<Converter<?, ?>>(); converterList.add(new MongoColorWriter()); converterList.add(new MongoColorReader()); return new CustomConversions(converterList); } }
-
==============================
4.새로운 패키지의 새로운 LOCALDATE 및 LocalDateTime 클래스를 사용하여 유사한 문제에 자바 (8) I 달렸다의 java.time 패키지의 도입. 나는 그것을 해결하는 방법입니다 :
새로운 패키지의 새로운 LOCALDATE 및 LocalDateTime 클래스를 사용하여 유사한 문제에 자바 (8) I 달렸다의 java.time 패키지의 도입. 나는 그것을 해결하는 방법입니다 :
나는이 변환 옵션의 모든 4 변환기를 썼다 :
다음 예는
public class DateToLocalDateTimeConverter implements Converter<Date, LocalDateTime> { @Override public LocalDateTime convert(Date source) { return source == null ? null : LocalDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault()); } }
그럼 난 MongoDB를 함께 자바에서 8 날짜를 작업 할 수 있었다 MongoDB의 연결을위한 XML 구성이를 포함하여 (모든 컨버터를 추가해야합니다) :
<mongo:mapping-converter> <mongo:custom-converters> <mongo:converter> <bean class="package.DateToLocalDateTimeConverter" /> </mongo:converter> </mongo:custom-converters> </mongo:mapping-converter>
-
==============================
5.org.springframework.data:spring-data-commons:1.13.3.RELEASE 때문에, 여기에 프로그램 사용자 지정 컨버터와 MongoTemplate을 만드는 방법
org.springframework.data:spring-data-commons:1.13.3.RELEASE 때문에, 여기에 프로그램 사용자 지정 컨버터와 MongoTemplate을 만드는 방법
public MongoTemplate mongoTemplate(String mongoUri) throws Exception { MongoDbFactory factory = new SimpleMongoDbFactory(new MongoClientURI(mongoUri)); CustomConversions conversions = new CustomConversions( Arrays.asList(new FooWriteConverter(), new FooReadConverter())); MongoMappingContext mappingContext = new MongoMappingContext(); DbRefResolver dbRefResolver = new DefaultDbRefResolver(factory); MappingMongoConverter mongoConverter = new MappingMongoConverter(dbRefResolver, mappingContext); mongoConverter.setCustomConversions(conversions); mongoConverter.afterPropertiesSet(); return new MongoTemplate(factory, mongoConverter); }
(실시 생략) 변환기
class FooWriteConverter implements Converter<Foo, DBObject> { ... } class FooReadConverter implements Converter<DBObject, Foo> { ... }
-
==============================
6.나를 위해 대신 작가의 독자로 내 계산기를 등록했다. 당신이 당신의 컨버터 클래스에 @WritingConverter 주석을 추가 할 필요가 있음을 해결하려면
나를 위해 대신 작가의 독자로 내 계산기를 등록했다. 당신이 당신의 컨버터 클래스에 @WritingConverter 주석을 추가 할 필요가 있음을 해결하려면
@Component @WritingConverter public class NoteWriterConverter implements Converter<Note, DBObject> { @Override public DBObject convert(Note source) { DBObject obj = new BasicDBObject(); obj.put("title", source.getTitle()); obj.put("reviewDate", source.getReviewDate()); obj.removeField("_class"); return obj; } }
from https://stackoverflow.com/questions/13780692/set-mongodb-converter-programmatically by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 이름을 일치하는 배열 요소의 MongoDB를 2.1 집계 프레임 워크 합 (0) | 2019.12.23 |
---|---|
[MONGODB] MongoDB를 제한 메모리 (0) | 2019.12.23 |
[MONGODB] 몽구스 스키마의 배열 크기에 대한 제한을 설정하는 방법 (0) | 2019.12.22 |
[MONGODB] 몽구스 - ObjectId가 배열에 채우기를 사용 (0) | 2019.12.22 |
[MONGODB] MongoDB를가 : 큰 파일을 가져올 때 mongoimport는 연결이 끊어 (0) | 2019.12.22 |