我一直在寻找以下异常消息的解决方案,当我向实体发布更新时,我在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楼 票数:5 已采纳

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

  ask by sonoerin translate from so

未解决问题?本站智能推荐:

1回复

无法使用杰克逊反序列化包含2个具有相同ID的对象的Json

我已经使用jackson JsonIdentityInfo处理spring mvc中的递归对象引用。 我遇到了一个问题,即无法反序列化包含2个具有相同ID的对象的Json。 如果您在上面看到,则两个组织都映射有企业“ 1”。 对于第一个组织,它是整个企业对象,但对于组织2,它仅给出ID。
2回复

json序列化缺少杰克逊斯普林字段

此Question类的json序列化中缺少“操作”字段。 我知道我要查询的问题有动作,因为我在控制器中返回问题对象之前先查看了它 这是动作课 我有一个ActionController,它为该类返回一个json字符串。 为什么Quest的json中缺少Action类? 这是Acti
1回复

杰克逊序列化视图:嵌套对象

以下是基于Spring Boot 1.3的项目的摘录。 Json序列化是通过Jackson 2.6.3进行的。 我有以下Spring MVC控制器: 返回的Results如下(删除了getter和setter): Account类如下(删除了getter和setter): 我也
1回复

反序列化JSON值的字符串

我们正在使用Spring Boot公开一个REST端点,该端点被一个哑客户端调用,该客户端向我们提供了以下内容: 我们创建了以下对象: 和 并将端点暴露为 但是控制甚至没有达到receive方法,并因400 BAD REQUEST而失败。 我认为这与data是JSON值的字符串
2回复

Spring无法反序列化请求正文

当我访问GenericMockingForm的内容时,它为null 以上是我的代码 如何反序列化请求有效负载? 当我访问GenericMockingForm的内容时,它为null
1回复

如何使用杰克逊进行反序列化

REST服务中的json对象 使用JacksonInFiveMinutes中的代码 ObjectMapper映射器=新的ObjectMapper(); 地图userData = mapper.readValue(webResource.queryParams(queryParams).
1回复

如何忽略像“car”这样的空json对象:{},在使用jackson反序列化后会导致空的pojo

我有一个休息服务,它使用来自 Angular UI 和其他休息客户端的 json。 数据基于复杂的实体结构,约 50 个实体存储在具有约 50 个表的数据库中。 问题在于可选的 OneToOne 关系,因为 Angular 将可选对象作为空定义发送,例如"car": {}, 。 spring 数据
1回复

无法从String反序列化`java.util.Date`类型的值

使用Spring 1.5.8.RELEASE Jackson mapper给出以下异常。 在[来源:UNKNOWN; line:-1,column:-1](通过引用链:com.copart.conversationapi.calldisposition.model.vo.CallLogEn