我有这样的模特:
... DATE_FORMAT(creation, \'....\')....
和json的一部分:
public class Type {
@XmlElementRef(name = "ConversationId", namespace = "...", type = JAXBElement.class, required = false)
protected JAXBElement<String> conversationId;
}
我尝试使用此映射器进行反序列化:
"conversationId": {
"declaredType": "java.lang.String",
"globalScope": false,
...,
"value": "ABC000000001"
},
但无论如何,我的计划并不顺利,我得到了:
com.fasterxml.jackson.databind.JsonMappingException:找不到类型[simple type,class javax.xml.bind.JAXBElement]的合适构造函数:无法从JSON对象实例化(缺少默认构造函数或创建者,或者可能需要添加/启用类型信息?)
我想阅读一些关于mixins的文档,但是关于官方杰克逊的网站有过时的信息,我使用的是2.5.1版本
答案 0 :(得分:0)
我遇到了同样的问题,终于能够解决。为了使它起作用,需要发生两件事:
com.foo.bar
,然后Mixin类一定不在此包中。这是我的代码:
package com.foo.bar;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
@JsonIgnoreProperties(value = {"globalScope", "typeSubstituted", "nil", "scope"})
public abstract class JAXBElementMixIn<T> extends JAXBElement<T> {
@JsonCreator
public JAXBElementMixIn(@JsonProperty("name") QName name,
@JsonProperty("declaredType") Class<T> declaredType,
@JsonProperty("value") T value) {
super(name, declaredType, value);
}
}
以及使用它的代码:
package x.y.z;
...
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(JAXBElement.class, JAXBElementMixIn.class);