Java 杰克逊'@JsonTypeInfo';和'@杰索尼奥雷';对于迭代器类?
我最近从Jackson 2.9.10升级到2.10.0,并注意到迭代器类序列化方式的变化 在下面的测试中,2.9.10(处理JsonTypeInfo和JsonIgnore)的输出是 {@class:“IteratorTest”} 但是在2.10.0中,JsontTypeInfo和JsonIgnore不被处理,输出是 [“迭代测试”、[“一”、“二”]] 新的序列化行为正确吗?是否有一个解决办法来改变旧的行为Java 杰克逊'@JsonTypeInfo';和'@杰索尼奥雷';对于迭代器类?,java,jackson,jackson-databind,Java,Jackson,Jackson Databind,我最近从Jackson 2.9.10升级到2.10.0,并注意到迭代器类序列化方式的变化 在下面的测试中,2.9.10(处理JsonTypeInfo和JsonIgnore)的输出是 {@class:“IteratorTest”} 但是在2.10.0中,JsontTypeInfo和JsonIgnore不被处理,输出是 [“迭代测试”、[“一”、“二”]] 新的序列化行为正确吗?是否有一个解决办法来改变旧的行为 //测试类 导入java.util.Iterator; 导入java.util.Arra
//测试类
导入java.util.Iterator;
导入java.util.ArrayList;
导入java.util.List;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入java.io.IOException;
导入com.fasterxml.jackson.annotation.JsonIgnore;
导入com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.PROPERTY,PROPERTY=“@class”,visible=true)
公共类IteratorTest实现迭代器{
@杰索尼奥雷
私有迭代器iterData;
私有静态最终ObjectMapper MAPPER=新ObjectMapper();
迭代器测试(迭代器iterData){this.iterData=iterData;}
@凌驾
公共布尔hasNext(){
返回iterData.hasNext();
}
@凌驾
公共交通工具{
返回iterData.next();
}
公共静态void main(字符串[]args)引发IOException{
列表字符串=新的ArrayList();
字符串。添加(“一”);
字符串。添加(“两个”);
IteratorTest it=new IteratorTest(strings.iterator());
System.out.println(“--序列化--”);
字符串s=MAPPER.writeValueAsString(它);
系统输出打印项次;
}
}
//考试结束
是的,对其进行调试,使用2.9.10版可以获得BeanSerializer
,使用2.10.0版可以获得迭代器Serializer
在2.10.0版中,当您的类没有任何属性(BeanSerializerFactory.FindSerializerByAndType
)时,您将获得IteratorSerializer
)。在2.9.10版中,您可以从builder.createDummy()
获得BeanSerializer
修正:
- 使用自定义序列化程序
- 可能会更改OM的迭代器类的处理
- 使用现有属性,s.t.创建一个
(这将为您提供不同的json):BeanSerializer
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.EXISTING_PROPERTY,PROPERTY=“myClass”) 类IteratorTest实现迭代器{ 私有字符串myClass=IteratorTest.class.getSimpleName(); ... }
BeanSerializer
,使用2.10.0版可以获得迭代器Serializer
在2.10.0版中,当您的类没有任何属性(BeanSerializerFactory.FindSerializerByAndType
)时,您将获得IteratorSerializer
)。在2.9.10版中,您可以从builder.createDummy()
获得BeanSerializer
修正:
- 使用自定义序列化程序
- 可能会更改OM的迭代器类的处理
- 使用现有属性,s.t.创建一个
(这将为您提供不同的json):BeanSerializer
@JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.EXISTING_PROPERTY,PROPERTY=“myClass”) 类IteratorTest实现迭代器{ 私有字符串myClass=IteratorTest.class.getSimpleName(); ... }
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "myClass")
class IteratorTest<T> implements Iterator<T> {
private String myClass = IteratorTest.class.getSimpleName();
...
}