- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我得到了一个 JSON,我将其序列化为 MongoDB BasicDBObject
并将其插入到数据库中:
String serialized = "";
try {
serialized = OBJECT_MAPPER.writeValueAsString(customEx.getOut().getBody());
} catch (JsonProcessingException e) {
e.printStackTrace();
}
collection.update(upsertQuery, BasicDBObject.parse(serialized), true, false);
在从数据库中读取 DBObject
时,我想使用带有给定类的 ObjectMappers'
readValue()
将其转换为 POJO :
public static <T> T fromDB(DBObject o, Class<T> clazz) {
try {
return OBJECT_MAPPER.readValue(o.toString(), clazz);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我想将其转换成的类是从 xsd sheme 生成的,还包含如下所示的 timestamps
/long
值:
@XmlRootElement(name = "ItemType")
public class ItemType {
@XmlSchemaType(name = "dateTime")
protected XMLGregorianCalendar date;
[...]
然而,这对于较旧的 Java MongoDB 版本来说效果很好。现在长值被序列化为 BSON,如下所示:
"date": {
"$numberLong": "1551172199214"
}
当我尝试使用 jacksons ObjectMapper
反序列化它时,我得到了
Cannot deserialize instance of
javax.xml.datatype.XMLGregorianCalendar
out of START_OBJECT token
我很清楚这样做的原因,因为 long 值在自己的 BSON - Style
对象中。
到目前为止,我已经尝试过像这样使用 BsonDocument
:
public static <T> T fromDB(DBObject o, Class<T> clazz) {
try {
BsonDocument parse = BsonDocument.parse(o.toString());
return OBJECT_MAPPER.readValue(parse.toJson(), clazz);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
但这仍然没有将 BSON 部分转换为 JSON。
有没有办法使用 Jacksons ObjectMapper
将 BSON 反序列化为给定的类?或者只是将它转换为 DBObject
而不使用 BSON 部件?
最佳答案
如果日历字段被包装,我们需要将其解包。我们可以扩展已经实现的 CoreXMLDeserializers.GregorianCalendarDeserializer
:
class XmlGregorianCalendarDeserializer extends CoreXMLDeserializers.GregorianCalendarDeserializer {
@Override
public XMLGregorianCalendar deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException {
jp.nextToken(); // Skip FIELD_NAME
jp.nextToken(); // Skip VALUE_STRING
XMLGregorianCalendar calendar = super.deserialize(jp, ctxt);
jp.nextToken(); // Skip END_OBJECT
return calendar;
}
}
如果 XMLGregorianCalendar
总是被包装,我们可以使用 SimpleModule
注册这个反序列化器。请参见以下示例:
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ext.CoreXMLDeserializers;
import com.fasterxml.jackson.databind.module.SimpleModule;
import java.io.IOException;
import javax.xml.datatype.XMLGregorianCalendar;
public class Test {
public static void main(String[] args) throws Exception {
SimpleModule wrappedCalendarModule = new SimpleModule();
wrappedCalendarModule.addDeserializer(XMLGregorianCalendar.class, new XmlGregorianCalendarDeserializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(wrappedCalendarModule);
String json = "{\n"
+ " \"date\":{\n"
+ " \"$numberLong\":\"1551172199214\"\n"
+ " },\n"
+ " \"name\":\"Rick\"\n"
+ "}";
System.out.println(mapper.readValue(json, Wrapper.class));
}
}
class Wrapper {
private XMLGregorianCalendar date;
private String name;
// getters, setters, toString
}
以上代码打印:
Wrapper{date=2019-02-26T09:09:59.214Z, name='Rick'}
关于java - 来自 MongoDB BSON 的 Jackson ObjectMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54883074/
这是我的设置: 带有自定义 MessageConverter 的 ObjectMapper 的 RestTemplate,它具有一些反序列化功能和问题处理程序 (Jackson Fasterxml 2
我们有一个基于 Spring 的应用程序,并且我们为 Jackson ObjectMapper 类定义了一个单例 bean。 @Bean(name = "jacksonObjectMapper") p
当依赖项中的 jar 中定义了另一个对象映射器时,如何使我的对象映射器工作? 我正在尝试使用 Swagger与 Jersey 2在 Jetty 下运行。问题是,一旦我将 Swagger JAX-RX
我刚刚更新到 Xcode 10.1 Swift 版本 4.2.1 我有几个构建错误: Invalid redeclaration of ' 3.3' $ pod 'ObjectMapper', '3.
您好,我是 IOS 开发的新手。我正在创建一个小应用程序。我正在尝试导入 ObjectMapper 但它没有找到任何模块。我已经安装了 pod。我的 pod 文件看起来像: target 'Sam
ObjectMapper 忽略字段大小写 核心代码: ObjectMapper mapper = new ObjectMapper(); mapper.configure(Deser
我加载一个资源文件json与文本格式 { "sources": [{ "prop1": "1", "prop2": "2" },
我有以下类(class): public class Car{ private String id; private String name; public Car() { } public Car(
使用 ObjectMapper 解析通用对象时出现错误这是我的类(class): class BaseResponse: NSObject, Mappable { var isSuccess:
我正在将印地语存储在数据库中。在我的 fetch 方法中,我使用 objectMapper 它将印地语字体转换为特殊字符。没有objectmapper它工作正常。 @CrossOrigin @
我正在尝试使用 Jackson ObjectMappper 将我的 Java POJO 转换为 Map。但是,在转换时,日期会更改为字符串。 这是我的 POJO: public class Sampl
我将日期传递为 "scoreTimestamp": "2015-04-15T10:00:00.000Z",并希望将此 json 作为字符串保存在数据库中,因此使用方法 ObjectMapper ob
使用 ObjectMapper 解析通用对象时出现错误这是我的类(class): class BaseResponse: NSObject, Mappable { var isSuccess:
我遇到了一个我不知道如何解决的问题。 当我尝试将此 JSON 映射到 User 对象时,它失败了: SwiftyJSON 在“2.3.3” JSON: { "results":[
我有一个自定义的 ObjectMapper 类。我想根据数据将元素映射到不同的对象类型。我已经实现了如下逻辑。但它没有给我值,只是 null。 class FeedObject : Object, M
我正在从服务器解析 json。我在 json 中获得了 4 个值,因此我创建了模型类 class PriceData: Mappable { var buy: Double? var sell: Do
我有这个映射器: import Foundation import ObjectMapper class Article: Mappable { var id: Int! var na
我有下面的一段代码,可以将带注释的 Java 对象转换为 Json 字符串。 try { String jsonString = mapper.writeValueAsStr
这个问题在这里已经有了答案: Jackson - Required property? (4 个答案) 关闭 7 年前。 假设我有这样的 json,我想将它反序列化为一个名为 SubscriberP
我有一个 JSON,我将其解析为结果对象列表。此对象包含 5 个字符串字段,称为 photo1、photo2 等。(基于 JSON)是否可以将它们直接读入列表字段? JSON 喜欢: { "E
我是一名优秀的程序员,十分优秀!