我正在编写一个mixin来将字符串反序列化为javax.servlet.http.Cookie
Mixin.java
package a; import org.codehaus.jackson.annotate.JsonProperty; public abstract class MixIn { MixIn(@JsonProperty("name") String name, @JsonProperty("value") String value) { } }
HelloWorld.java
package b; import a.MixIn; ObjectMapper mapper = new ObjectMapper(); mapper.getDeserializationConfig().addMixInAnnotations(Cookie.class, MixIn.class); Cookie aCookie = mapper.readValue("{"name":"abc","value":"xyz"}", Cookie.class);
它似乎提供了" JsonMappingException:没有为类型[simple type,class javax.servlet.http.Cookie]找到合适的构造函数"错误。
请注意
- Mixin(必须)被定义为一个单独的类(不是内部类,不是静态的)
- Mixin和它所使用的类(必须是)在2个不同的包中。
我正在使用杰克逊1.9.9
答案 0 :(得分:2)
为Mixin创建一个单独的类,
public abstract class MixinClass extends OriginalClass {
//`datamember` is the datamember required to create instance of OriginalClass
@JsonCreator
MixinClass(@JsonProperty("item") datamember item) { super(item); }
}
在mapper类中添加此内容,
objectMapper.addMixInAnnotations(OriginalClass.class, MixinClass.class);
这将解决问题。确保MixinClass是一个单独的.java文件,而不是内部类。
答案 1 :(得分:1)
你不需要在mixin构造函数中包含@JsonCreator吗?我自己仍在努力解决类似的问题,所以我不能100%肯定。
我的问题:@JsonCreator and mixin via Module not working for 3rd Party Class
更新:我在上面的问题中的例子是有效的,你对mixin的评论需要在一个单独的包而不是内部类中做了诀窍,谢谢!