繁体   English   中英

杰克逊JSON无法反序列化哈希集

Jackson JSON unable to deserialize hashset

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我一直在寻找以下异常消息的解决方案,当我向实体发布更新时,我在spring-boot / spring-mvc项目中得到了该消息:

   o.s.w.s.m.m.a.HttpEntityMethodProcessor  : Written [{timestamp=Wed Jan 14 11:15:34 MST 2015, status=400, error=Bad Request, exception=org.springframework.http.converter.HttpMessageNotReadableException, message=Could not read JSON: Can not deserialize instance of java.util.HashSet out of START_OBJECT token

at [Source: org.apache.catalina.connector.CoyoteInputStream@7f5840c4; line: 1, column: 146] (through reference chain: com.company.product.model.people.dto.EmployeeDTO["user"]->com.company.product.security.dto.UserDTO["roles"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.HashSet out of START_OBJECT token

但是,看来我的情况与我在StackOverflow和Jackson文档中看到的其他情况略有不同。

这是我的两个数据结构:

public class EmployeeDTO {
   List<WorkdayDTO> workDays = new ArrayList<WorkdayDTO>();
   private UserDTO user;
   ...
   public List<WorkdayDTO> getWorkDays() {
        return workDays;
    }

    public void setWorkDays(List<WorkdayDTO> workDays) {
        this.workDays = workDays;
    }
   public UserDTO getUser() {
        return user;
    }

    public void setUser(UserDTO user) {
        this.user = user;
    }

}

和:

public class UserDTO {
    private boolean credentialsNonExpired;
    private OfficeDTO office;
    @JsonProperty("roles")  // <-- added this based on early research, hasn't helped though
    private Set<String> roles = new HashSet<String>();
    // .. standard getters & setters
}

当我执行GET时,我的json响应是这样的:

[
   {
      "employeeId":1,
      "endDateTime":null,
      "workDays":[

      ],
      "ssn":"111-22-3333",
      "maskedSsn":null,
      "user":{
         "username":"user@test.com",
         "password":null,
         "enabled":true,
         "accountNonExpired":true,
         "accountNonLocked":true,
         "credentialsNonExpired":true,
         "office":null,
         "roles":[
            "OWNER"
         ]
      },
      "address":{
         ...
      }
   },
   {
      "employeeId":2,
      "endDateTime":null,
      "workDays":[
       ...
      ],
      "ssn":"333-44-5555",
      "maskedSsn":null,
      "user":{
         "username":"userA@test.com",
         "password":null,
         "enabled":true,
         "accountNonExpired":true,
         "accountNonLocked":true,
         "credentialsNonExpired":true,
         "office":null,
         "roles":[
            "MANAGER"
         ]
      },
      "address":{
        ...
      }
   }
]

似乎不喜欢我的employee.user.roles列表中的单个字符串,但是添加“ @JsonProperty(“ roles”)“也不起作用。

1 个回复

POST的正文格式不正确。 它包含用于roles的JSON对象。 JSON对象无法映射到HashSet ,因此失败。 JSON中的roles必须是一个数组。

1 杰克逊反序列化哈希图

我有以下JSON: 第一个属性是具有属性映射的数组中的项目计数。 如果我想填充一个拥有以下值的类,最好的方法是使用Jackson来反序列化此方法: 例如。 ...

2 用杰克逊反序列化复杂的Json

我遇到了“复杂” json的问题: 有人可以告诉我如何反序列化这种JSON以获得POJO列表吗? POJO必须是一本包含3个字段的“书”:标题,说明和链接 谢谢。 ...

3 JSON杰克逊多态反序列化

挣扎着看似微不足道的东西,应该可以正常工作。 我有带有“ @class”属性的JSON,并且在调用时不知道它的类是readValue()想要将其反序列化为“ @class”引用的类的对象。 相反,我得到的是“ LinkedHashMap”。 抱歉,如果是dup,但找不到完全相同的问题 ...

4 用杰克逊反序列化嵌套的json

这是对我以前的问题的扩展,它从java中的复杂JSON中提取特定值 。 我有解决方案,但是我想尝试使用bean类从json字符串中提取3个值。 对于给定的json结构。 json结构在链接中。 我正在使用以下代码调用杰克逊: 我为整个bean生成了POJO,其中mainbea ...

6 杰克逊 - 反序列化嵌套的JSON

我有一个JSON字符串,其格式如下: JSON的响应部分对于一堆响应类型是常见的。 此JSON的报告部分仅适用于此响应。 所以我创建了一个Response类,如下所示,带有getter和setter(为简洁起见,这里没有包含getter和setter): 然后,我创建了一个R ...

7 使用 jackson 进行 JSON 反序列化

我有 JSON,它看起来像这样: 记录数组中的对象可以是不同的类型,但不会混合。 在反序列化期间,属性字段可以被忽略。 我试图用 jackson 将它反序列化到这个 Java 类中: BaseObject 的子类将具有必填字段,例如: 这是反序列化代码: 但这并不成功,我得到了例 ...

8 杰克逊的JSON反序列化问题

我有一个像这样的json对象 我想将其映射到该对象 我像这样使用JSONSerialiser 但是,如何将“ description.plain.value”映射到“ JsonResponse.description”? 可以使用杰克逊注释来完成吗? 谢谢你的 ...

10 杰克逊无法反序列化Facebook Webhook

我在春季启动项目中使用Jackson并休眠: 并将其添加到转换器中: 我使用facebook webhooks来获取有关Messenger中新消息的信息: 有效负载参数是一个字符串,但是杰克逊转换器无法反序列化它: wsmsDefaultHandlerExcep ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM