Jackson JSON Mixin反序列化-具有不同类型的数组
我有一个JSON字符串,看起来像Jackson JSON Mixin反序列化-具有不同类型的数组,json,jackson,mixins,vk,Json,Jackson,Mixins,Vk,我有一个JSON字符串,看起来像 {"response":[125,{"id":219},{"id":212}]} 如您所见,响应是一个由Number和2个pojo id:Number组成的数组 你能给我一些建议如何使用Jackson Mixins反序列化这些字符串吗? 假设每个条目都有POJO的类型不起作用-Jackson抛出一个异常,因为Number不是POJO的实例。 实际上,可以跳过这个讨厌的数字,我只需要POJO的列表 Test.java VKontaktePosts.java vk
{"response":[125,{"id":219},{"id":212}]}
如您所见,响应是一个由Number和2个pojo id:Number组成的数组
你能给我一些建议如何使用Jackson Mixins反序列化这些字符串吗?
假设每个条目都有POJO的类型不起作用-Jackson抛出一个异常,因为Number不是POJO的实例。
实际上,可以跳过这个讨厌的数字,我只需要POJO的列表
Test.java
VKontaktePosts.java
vkontaktepostmixin.java
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new SimpleModule("VKontakteModule", new Version(1, 0, 0, null)) {
@Override
public void setupModule(SetupContext context) {
context.setMixInAnnotations(VKontaktePost.class, VKontaktePostMixin.class);
context.setMixInAnnotations(VKontaktePosts.class, VKontaktePostsMixin.class);
}
});
String str;
VKontaktePosts posts;
str = "{\"response\":[{\"id\":282},{\"id\":283}]}";
posts = objectMapper.readValue(deserStr, VKontaktePosts.class); //Works
str = "{\"response\":[125,{\"id\":282},{\"id\":283}]}";
posts = objectMapper.readValue(deserStr, VKontaktePosts.class); //Throws JsonMappingException: Can not construct instance of VKontaktePost, problem: no suitable creator method found to deserialize from JSON Number
public class VKontaktePosts implements Serializable {
private final List<VKontaktePost> posts;
public VKontaktePosts(List<VKontaktePost> posts) {
this.posts = posts;
}
public List<VKontaktePost> getPosts() {
return posts;
}
}
public class VKontaktePost {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class VKontaktePostsMixin {
@JsonCreator
VKontaktePostsMixin(@JsonProperty("response") List<VKontaktePostMixin> posts) {
}
@JsonProperty("response")
abstract List<VKontaktePostMixin> getPosts();
}
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class VKontaktePostMixin {
@JsonProperty("id")
abstract String getId();
}