当前位置: 首页 > 知识库问答 >
问题:

无法在Mongodb中序列化LocalDate

梁烨烨
2023-03-14
private def writeData(measure: DBCollection, installation: Int, date: String, dates: ListBuffer[LocalDate],
                    values: ListBuffer[BigDecimal], validated: Boolean, overwrite: Boolean) {
  val timeValues: BasicDBList = new BasicDBList
  var i = 0
  while ( i < dates.size )  {
    val obj: BasicDBObject = new BasicDBObject("time", dates(i))
    obj.put("value", values(i).toString())
    timeValues.add(obj)
    i += 1
  }
  if ( debug ) System.out.println("Storedata: " + timeValues.toString) <-- error here

java.lang.runtimeException:json无法序列化类型:在com.mongodb.util.ClassMapBasedObjectSerializer.serializer(ClassMapBasedObjectSerializer.java:77)在com.mongodb.util.ClassMapBasedObjectSerializer.serializer(jsonSerializers.java:317)在)在com.mongodb.util.classmapbasedObjectSerializer.serialize(classmapbasedObjectSerializer.java:79)在com.mongodb.util.json.serialize(json.java:54)在com.mongodb.util.json.serialize(json.java:40)在com.mongodb.util.json.serialize(json.java:40)在位于sun.reflect.n的VemethodAccessorImpl.Invoke0(本机方法)在sun.reflect.delegatingMethodAccessorImpl.invoke(nativeMethodAccessorImpl.java:62),java.lang.reflect.method.invoke(method.java:43),com.intellij.rt.execution.application.appmain.main(appmain.java:134),java.lang.reflect.method.invoke(method.java:483)

我使用的是mongo-java-driver-2.13.0-rc1.jar Scala 2.11.4和java 1.8.0_25

为了完整性。

共有1个答案

赫连琦
2023-03-14

不幸的是,MongoDB驱动程序使用java.util.date类型,请参见此处的文档

因此,必须首先将LocalDate转换为Date实例,例如:

MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("test");
DBCollection coll = db.getCollection("testcol");

LocalDate ld = LocalDate.now();
Instant instant = ld.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant();
Date date = Date.from(instant);

BasicDBObject doc = new BasicDBObject("localdate", date);
coll.insert(doc);

不过,我建议使用Morphia或Jongo之类的东西来包装MongoDB驱动程序,因为您可以注册全局映射器来动态隐式地执行这些转换,这样您就可以在域模型中使用LocalDate等

 类似资料:
  • 问题内容: 我正在使用Java 8 java.time.LocalDate来解析日期。 但是尝试将LocalDate对象插入到mongodb中。我在Java驱动程序中收到错误: 错误日志: java.lang.RuntimeException:json无法序列化类型:com.mongodb.util.JSONSerializers $ MapSerializer.serialize(JSONSer

  • 问题内容: 我试图序列化和反序列化内部对象的数组列表: HairList对象也是一个可序列化的对象。 此代码执行返回以下错误: 排队 我不知道我在做什么错。你能给个小费吗? 更新: 解决: 仅使用HairBirt的本机数组而不是ArrayList即可工作: 代替 感谢大家的帮助。 问题答案: 不要使用-而是使用二进制数据并对它进行base64编码,以将其转换为字符串而不会丢失信息。 我强烈怀疑这是

  • 问题内容: 我正在使用python包pymongo从mongodb数据库中检索数据。 然后我转换为列表 这是print(l)返回的内容: 现在,我需要转换为JSON,以便可以对其进行操作。 我还尝试遵循 http://api.mongodb.org/python/1.7/api/pymongo/json_util.html 失败:编辑:链接的最新版本为http://api.mongodb.org/

  • 我试图反序列化javax.ws.rs.core.MultiValuedHashMap。 MultivaluedHashMap实现java.io.Serializable,并且有一个公共的、没有arg构造函数。 提前感谢你的帮助。

  • 我从 REST API 获得以下 JSON 作为响应。 并尝试使用下面的代码进行解析,但这不会导致正确的反序列化类型。 下面是我在JSON响应中收到的字段的类。 缺少了什么?

  • 我正试图将流数据从Kafka保存到卡桑德拉。我能够读取和解析数据,但是当我调用下面的行来保存数据时,我会得到一个异常。我的类正在扩展序列化,但不确定为什么我会看到这个错误,在谷歌搜索了3个小时后没有得到多少帮助,有没有人能给出任何指示? 我得到了 sparkException:任务不可序列化 下面是完整的日志 16/08/06 10:24:52错误JobScheduler:运行作业流作业14705