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

时间:2014-02-14 09:34:17

标签: java json rest jackson jax-rs

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

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

调用此方法时,pojoList的成员的类型为LinkedHashMap,而不是MyPojo。因此杰克逊将列表反序列化为一般的“地图列表”,而不是使用声明的类型。

我知道杰克逊能够在直接使用ObjectMapper时对反序列表进行反序列化。但是,如果通过JAX-RS使用它,杰克逊怎么能这样做呢?我是否缺少一个特殊的@Json...注释?

1 个答案:

答案 0 :(得分:1)

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

因此CDI代理会导致

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

显示为

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

到Resteasy(=我们的JAX-RS提供商)。因此,它被反序列化为杰克逊的“地图列表”。删除拦截器解决了这个问题,但不幸的是,这对我们来说不是一个可行的选择。