Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 Jackson json提供程序linkedHashSet反序列化_Java_Spring_Rest_Jackson_Jax Rs - Fatal编程技术网

Java Jackson json提供程序linkedHashSet反序列化

Java Jackson json提供程序linkedHashSet反序列化,java,spring,rest,jackson,jax-rs,Java,Spring,Rest,Jackson,Jax Rs,我们使用SpringREST模板和jackson json提供程序来序列化/反序列化json。从我的服务中,我发送一个linkedHashSet,当我收到它时,它会在客户端转换为哈希集。因此,我放松了元素的插入顺序。 这是Set的jackson json提供程序的默认实现吗?是否有其他方法可以反序列化以正确实现?我觉得这将是棘手的,但你们的投入将得到高度赞赏 谢谢这完全取决于您请求的结果类型:如果请求将数据映射到LinkedHashSet,那么JSON数组将被映射到它。如果您使用像java.la

我们使用SpringREST模板和jackson json提供程序来序列化/反序列化json。从我的服务中,我发送一个linkedHashSet,当我收到它时,它会在客户端转换为哈希集。因此,我放松了元素的插入顺序。 这是Set的jackson json提供程序的默认实现吗?是否有其他方法可以反序列化以正确实现?我觉得这将是棘手的,但你们的投入将得到高度赞赏


谢谢

这完全取决于您请求的结果类型:如果请求将数据映射到
LinkedHashSet
,那么JSON数组将被映射到它。如果您使用像
java.lang.Object
(或
java.util.Collection
)这样的模糊类型,您将获得JSON数组的
ArrayList

请记住,JSON是数据,而不是对象(默认情况下),因此默认情况下不会传递有关您使用的Java类型的元数据。如果您需要,可以通过多种方法来实现,但通常您只需要提供所需的类型。

您可以指定Jackson与
@JsonDeserialize
注释一起使用的具体类。只要说:

@jsondserialize(as=LinkedHashSet.class)


在属性的setter上。

尝试在setter上放置
@jsondserialize(as=LinkedHashSet.class)
?此外,如果该集合的顺序与程序的正确功能相关,那么将该字段声明为
LinkedHashSet
而不是
set
,实际上并不是一件坏事。在setter上使用@JsonDeserialize(as=LinkedHashSet.class)是有效的!thankshi感谢您提供的信息,因此HashSet似乎是jackson为集合选择的默认实现。我使用@JsonDeserialize(as=LinkedHashSet.class)将其反序列化为LinkedHashSet。问题是,在项目中,我们倾向于为集合使用Set、List等接口,而不是创建一个字段HashSet myField;所以我想很多人都会面临这个问题。是的,这是最直接有效的一套。但是,您可以轻松地覆盖此默认值
SimpleModule
具有
addAbstractTypeMapping
功能,您可以通过
Set
LinkedHashSet
来更改默认设置。@StaxMan我找了很长时间了。你的评论应该是答案