java - 如何反序列化 JSON 数组?

标签 java json cxf jax-rs jackson

我在 CXF 中使用 Jackson 来序列化/反序列化数据。不幸的是,我在配置 CXF/Jackson 来反序列化 JSON 数组时遇到了困难。如果能帮助解决问题,我将不胜感激。

到目前为止,大部分 json 数据都是对象格式,即

{ "objectCollection": [ {...}, {...}, {...}... ] }

但是,有问题的 json 数据是以下形式:

[ {...}, {...}, {...} ]

Web 服务端点需要一个“GroupsDto”对象(见下文) 有一个单一的属性 -- 组的集合,它是 通过 JSON 数组传输。

@PATH(...)
public Response createGroups(GroupsDto groups) {
...
}

我按如下方式将 @JsonDeserialize 添加到 GroupsDto 集合属性,但它不起作用。我继续得到:“无法从 START_ARRAY token 中反序列化 GroupsDto 的实例”

public class GroupsDto {

       private Collection<GroupDto> groups;

       /**
        * @return the groups
        */
       @XmlElement(name="group")
       @JsonDeserialize(contentAs=GroupDto.class)
       public Collection<GroupDto> getGroups() {
               return groups;
       }
...
}

最佳答案

如果json数据是这样的形式:

[ {...}, {...}, {...} ]

你必须使用添加另一个类说“包装器”:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ListDto extends ArrayList<GroupDto> {

    public ListDto() {
    }
}

并在反序列化时使用这个类。这种方法对我有用。

关于java - 如何反序列化 JSON 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106379/

相关文章:

json - GetMapping 不适用于 Elasticsearch 中的 Nest 客户端

javascript - 如何根据子属性将 JSON 排序到数组中

java - 使用 java Regex 将逗号替换为字符串中的任何特殊字符

java - 尝试创建 JSONObject 以无法评估 org.json.JSONObject.toString() 结束

java - CXF如何设置原因标记的区域设置?

java - Apache CXF |对 Web 服务调用的多个响应

java - 将摘要身份验证添加到 SOAP 请求

java - 变量类型问题

java - 用于保护 AngularJS 前端 + Java Web 服务的 Keycloak

java - 在 Clojure 中为 Java 返回值使用类型提示