java对象默认方法类型_java-包含Map字段的对象的Jackson默认类型

因此,我一直在尝试让Jackson对我拥有的一个对象进行序列化/反序列化,该对象本质上具有以下结构:

MyObject {

String a;

Map map;

}

在其中地图可以容纳嵌套地图或“原始”值(字符串,整数,长整数,双精度…)

显然,由于要正确反序列化类型信息是必需的,因此我不得不告诉Jackson这样做-我使用了默认类型:

return new ObjectMapper()

.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)

.enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, JsonTypeInfo.As.WRAPPER_ARRAY);

该对象最终完全按照我的意愿进行了序列化,仅在必要时添加类型信息:

{

"a" : "SomeString",

"map" : {

"String1" : "String1",

"Float1" : ["java.lang.Float", 1.0],

"Long1" : ["java.lang.Long", 1],

"Int1" : 1,

"Double1" : 1.0

}

}

但是,当我尝试用杰克逊反序列化此JSON时,它失败并显示以下错误:

java.lang.IllegalArgumentException: Can not deserialize instance of out of START_ARRAY token

at [Source: N/A; line: -1, column: -1] (through reference chain: ["name"])

at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2615)

at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542)

at com.rbsgbm.agile.mongo.dbobject.JacksonDBObjectConverter.fromDBObject(JacksonDBObjectConverter.java:39)

at com.rbsgbm.agile.mongo.DBCursorIterator.next(DBCursorIterator.java:32)

at com.rbsgbm.agile.repository.StorageBasedRepository$StorageBasedQuery$StorageBasedQueryIterator.next(StorageBasedRepository.java:258)

at com.rbsgbm.agile.repository.StorageBasedRepository$StorageBasedQuery$StorageBasedQueryIterator.next(StorageBasedRepository.java:242)

at com.rbs.agile.strategy.strategymanager.store.mongo.MongoStrategyStore.loadStrategies(MongoStrategyStore.java:81)

这可能表明它对地图中的值感到困惑,因为杰克逊认为不需要类型信息,因此没有将其包装在数组中.

有人可以建议正确的方法吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值