gpt4 book ai didi

java - JAX-RS:使用 JSON 数组的 PUT/POST 不会反序列化为类型化列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:24 24 4
gpt4 key购买 nike

我正在尝试将 JSON 数组放入 JAX-RS 服务(使用 Jackson 作为 JSON 提供程序)。该服务声明如下:

@PUT
public Response setList(List<MyPojo> pojoList) {
...
}

调用该方法时,pojoList 的成员的类型为 LinkedHashMap,而不是 MyPojo。因此 Jackson 将该列表反序列化为通用“映射列表”,而不是使用声明的类型。

我知道 Jackson 在直接使用其 ObjectMapper 时能够反序列化类型列表。但是当通过 JAX-RS 使用它时如何告诉 Jackson 这样做呢?我缺少一个特殊的 @Json... 注释吗?

最佳答案

我刚刚发现这是使用 CDI 拦截器的副作用(至少在使用 WELD 作为 CDI 提供程序时)。 CDI拦截器使用的代理类破坏了方法参数的泛型信息。

所以 CDI 代理会导致

public Response setList(List<MyPojo> pojoList) {
...
}

显示为

public Response setList(List pojoList) {
...
}

到 Resteasy(= 我们的 JAX-RS 提供商)。因此, jackson 将其反序列化为“ map 列表”。删除拦截器可以解决问题,但不幸的是,这对我们来说不是一个可行的选择。

关于java - JAX-RS:使用 JSON 数组的 PUT/POST 不会反序列化为类型化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21775590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com