0
我在MongoDB中使用MongoDB與Spring Boot(1.4.4.RELEASE),我在MongoDB數據庫中存儲一個對象並得到一個CodecConfigurationException當我嘗試獲取Object AggregationOperation。CodecConfigurationException在MongoDB中找不到DateTime的編解碼器
我MongoDbConfig是
@Configuration
public class MongoDbConfig {
@Value("${mongodb_host}")
private String host;
@Value("${mongodb_port}")
private String port;
@Value("${mongodb_name}")
private String dataBase;
@Value("${mongodb_username}")
private String userName;
@Value("${mongodb_password}")
private String password;
public @Bean MongoClient mongoClient() {
return new MongoClient(new ServerAddress("127.0.0.1", 27017), new ArrayList<MongoCredential>() {
{
add(MongoCredential.createCredential(userName, dataBase,password.toCharArray()));
}
});
}
public @Bean MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(mongoClient(), dataBase);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory());
return mongoTemplate;
}
}
我的文檔是
@Document(collection = "FuelBook")
public class FuelBook implements Serializable {
private String orgId;
private String branchId;
private String vehicleId;
private String driverName;
private DateTime date;
private boolean isActive = true;
private Double kmsReading;
private float costOfFuel;
private String typeOfFuel;
//getter and setter
}
我使用下面的代碼
public String addFuelBookDetails(AddFuelBookDetailsDTO request,
String orgId, String branchId, String vehicleId) {
try{
if(!mongoTemplate.collectionExists(FuelBook.class)){
mongoTemplate.createCollection(FuelBook.class);
}
FuelBook fuelBook = new FuelBook();
fuelBook.setOrgId(orgId);
fuelBook.setBranchId(branchId);
fuelBook.setVehicleId(vehicleId);
fuelBook.setDriverName(request.getDriverName());
fuelBook.setDate(TimeConversionHelper.getJodaDate(request.getDate(),
"yyyy-MM-dd"));
fuelBook.setCostOfFuel(Float.parseFloat((request.getCostOfFuel())));
fuelBook.setKmsReading(Double.parseDouble(request.getKmsReading()));
fuelBook.setTypeOfFuel(request.getTypeOfFuel());
mongoTemplate.insert(fuelBook, "FuelBook");
return StringConstants.SUCCESS;
} catch(Exception e) {
return null;
}
}
而這個代碼來創建字符串爲datetime
創建文檔使用下面的代碼試試10讓所有FuelBooks
AggregationOperation org = Aggregation.match(Criteria.where("orgId").is(orgId));
AggregationOperation branch = Aggregation.match(Criteria.where("branchId").is(branchId));
AggregationOperation vehicle = Aggregation.match(Criteria.where("vehicleId").is(vehicleId));
DateTime jodaStartTime = TimeConversionHelper.getJodaDate(request.getStartTime(), "yyyy-MM-dd");
DateTime jodaEndTime = TimeConversionHelper.getJodaDate(request.getEndTime(), "yyyy-MM-dd");
AggregationOperation startTime = Aggregation.match(Criteria.where("date").gte(jodaStartTime));
AggregationOperation endTime = Aggregation.match(Criteria.where("date").lte(jodaEndTime));
AggregationOperation offsetAggregation=Aggregation.skip(offset);
AggregationOperation limitAggregation=Aggregation.limit(limit);
Aggregation aggregation = Aggregation.newAggregation(org, branch, vehicle, startTime, endTime,offsetAggregation,limitAggregation);
AggregationResults<FuelBook> result = mongoTemplate.aggregate(aggregation, "FuelBook" ,FuelBook.class);
if(result!=null && result.getMappedResults()!=null && !result.getMappedResults().isEmpty()) {
List<FuelBook> fuelLists = result.getMappedResults();
不過,我遇到了此錯誤消息:
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.joda.time.DateTime.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:210)
at com.mongodb.DBObjectCodec.encodeMap(DBObjectCodec.java:220)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:196)
at com.mongodb.DBObjectCodec.encodeMap(DBObjectCodec.java:220)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:196)
at com.mongodb.DBObjectCodec.encodeMap(DBObjectCodec.java:220)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:196)
at com.mongodb.DBObjectCodec.encodeIterable(DBObjectCodec.java:269)
at com.mongodb.DBObjectCodec.writeValue(DBObjectCodec.java:198)
at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:128)
at com.mongodb.DBObjectCodec.encode(DBObjectCodec.java:61)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:63)
at org.bson.codecs.BsonDocumentWrapperCodec.encode(BsonDocumentWrapperCodec.java:29)
at com.mongodb.connection.RequestMessage.addDocument(RequestMessage.java:253)
at com.mongodb.connection.RequestMessage.addDocument(RequestMessage.java:205)
at com.mongodb.connection.CommandMessage.encodeMessageBodyWithMetadata(CommandMessage.java:75)
at com.mongodb.connection.RequestMessage.encodeWithMetadata(RequestMessage.java:160)
at com.mongodb.connection.CommandProtocol.sendMessage(CommandProtocol.java:184)
at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:108)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)
at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:173)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:215)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:186)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:178)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:91)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:84)
at com.mongodb.operation.CommandReadOperation.execute(CommandReadOperation.java:55)
at com.mongodb.Mongo.execute(Mongo.java:773)
at com.mongodb.Mongo$2.execute(Mongo.java:760)
at com.mongodb.DB.executeCommand(DB.java:653)
at com.mongodb.DB.command(DB.java:423)
at com.mongodb.DB.command(DB.java:439)
at com.mongodb.DB.command(DB.java:394)
at org.springframework.data.mongodb.core.MongoTemplate$3.doInDB(MongoTemplate.java:390)
at org.springframework.data.mongodb.core.MongoTemplate$3.doInDB(MongoTemplate.java:388)
at org.springframework.data.mongodb.core.MongoTemplate.execute(MongoTemplate.java:446)
at org.springframework.data.mongodb.core.MongoTemplate.executeCommand(MongoTemplate.java:388)
at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:1556)
at org.springframework.data.mongodb.core.MongoTemplate.aggregate(MongoTemplate.java:1491)
at com.icarat.eshiksha.mongodb.dao.impl.FuelBookDAOImpl.getFuelBookDetails(FuelBookDAOImpl.java:153)
at com.icarat.eshiksha.rest.controller.FuelBookController.getFuelBookDetails(FuelBookController.java:132)
任何人都可以提供關於爲什麼發生這種情況的一些見解?謝謝
請問你的Spring配置樣子? 'JodaTimeConverters'應該自動在Mongo上註冊。 – Veeram
@veeram我更新了我的問題。 JodaTimeConverts是靜態方法的類sir – vishwa
你的配置看起來不錯。當它在類路徑中找到joda jar時,Spring會自動註冊它。 。檢查'CustomConversions'構造函數。您可以嘗試調試該類。 – Veeram