Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 杰克逊'@JsonTypeInfo';和'@杰索尼奥雷';对于迭代器类?_Java_Jackson_Jackson Databind - Fatal编程技术网

Java 杰克逊'@JsonTypeInfo';和'@杰索尼奥雷';对于迭代器类?

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

我最近从Jackson 2.9.10升级到2.10.0,并注意到迭代器类序列化方式的变化

在下面的测试中,2.9.10(处理JsonTypeInfo和JsonIgnore)的输出是

{@class:“IteratorTest”}

但是在2.10.0中,JsontTypeInfo和JsonIgnore不被处理,输出是

[“迭代测试”、[“一”、“二”]]

新的序列化行为正确吗?是否有一个解决办法来改变旧的行为

//测试类
导入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.创建一个
    BeanSerializer
    (这将为您提供不同的json):

    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.EXISTING_PROPERTY,PROPERTY=“myClass”)
    类IteratorTest实现迭代器{
    私有字符串myClass=IteratorTest.class.getSimpleName();
    ...
    }
    

是的,对其进行调试,使用2.9.10版可以获得
BeanSerializer
,使用2.10.0版可以获得
迭代器Serializer

在2.10.0版中,当您的类没有任何属性(
BeanSerializerFactory.FindSerializerByAndType
)时,您将获得
IteratorSerializer
)。在2.9.10版中,您可以从
builder.createDummy()
获得
BeanSerializer

修正:

  • 使用自定义序列化程序
  • 可能会更改OM的迭代器类的处理
  • 使用现有属性,s.t.创建一个
    BeanSerializer
    (这将为您提供不同的json):

    @JsonTypeInfo(use=JsonTypeInfo.Id.NAME,include=JsonTypeInfo.As.EXISTING_PROPERTY,PROPERTY=“myClass”)
    类IteratorTest实现迭代器{
    私有字符串myClass=IteratorTest.class.getSimpleName();
    ...
    }
    

谢谢!我将采用2.10.0中使用的迭代器序列化程序的新行为。谢谢!我将采用2.10.0中使用的迭代器序列化器的新行为。
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "myClass")
class IteratorTest<T> implements Iterator<T> {

    private String myClass = IteratorTest.class.getSimpleName();

    ...
}