私は単純なポジョを持っています
import lombok.Data;
@Data
public class DataPojo {
private LocalDateTime myDate;
}
mongo + mongojack から pojo を読み込もうとすると
MongoCredential credential = MongoCredential.createCredential(userName, "aDb", password.toCharArray());
MongoClient mongoClient = new MongoClient(new ServerAddress(mongoServer), Arrays.asList(credential));
DB db = mongoClient.getDB("aDb");
DBCollection aCollection = db.getCollection("aCollection");
JacksonDBCollection<DataPojo, String> jDbCol = JacksonDBCollection.wrap(aCollection, DataPojo.class, String.class);
DataPojo d = jDbCol.findOne();
次のエラーが表示されます
java.lang.RuntimeException: IOException encountered while reading from a byte array input stream
at org.mongojack.internal.stream.JacksonDBDecoder.decode(JacksonDBDecoder.java:67)
...
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Problem deserializing property 'myDate' (expected type: [simple type, class java.time.LocalDateTime]; actual type: java.util.Date), problem: argument type mismatch (through reference chain: DataPojo["myDate"])
について読んだことがありますが@JsonDeserialize(using = LocalDateTimeDeserializer.class)
、それは他のエラーにつながるだけです。
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (VALUE_EMBEDDED_OBJECT), expected START_ARRAY: Expected array or string.
mongo-java-driver バージョン 3.1.0-rc0、mongojack バージョン 2.5.1 を使用しています。私が実行しているmongodbは2.6.9です。読み取ろうとしているフィールドは ISODate です。
私の問題はドライバーレベルにあるようです。java.util.Date の代わりに java.time.LocalDateTime として日付を表すように mongo ドライバーに指示する方法はありますか?