首页 > 解决方案 > 反序列化期间未映射标有 @JsonRootName 的类

问题描述

我正在使用 RestTemplate 调用外部 API。这是 API 调用的结果:

{
    "results": [
        {
            "code": "UDE",
            "usergroups": [
                {
                    "name": "Some name",
                    "users": [
                        {
                            "id": 457,
                            "login": "uid34",
                        }
                     ]
                }
            ]
        }
    ]
}

我只对获取users.

  1. 我不想返回一个JSON String和用户gson来定位users节点。
  2. 我想避免创建太多的包装器。

所以这就是我到目前为止所做的:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
@JsonInclude(Include.NON_NULL)
@JsonRootName("usergroups")
public class UserGroup{

    @JsonProperty("users")
    private List<User> users = new ArrayList<User>();

}

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Response<T> {

    @JsonProperty("results")
    private List<T> results= new ArrayList<>();
    
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User{
     private Integer id;
     private String login;
}

    ResponseEntity<Response<UserGroup>> response = restTemplate.exchange(url, HttpMethod.GET, entity,
            new ParameterizedTypeReference<Response<UserGroup>>(){});

    List<User> users = response.getBody().getResults()
            .stream()
            .map(UserGroup::getUsers)
            .flatMap(Collection::stream)
            .collect(Collectors.toList());

API 调用工作正常,但我所拥有的users属性始终为空UserGroup。我究竟做错了什么?谢谢你的帮助。

注意:我也尝试过这个解决方案,但出现异常

标签: javaspring-bootjacksonresttemplatejson-deserialization

解决方案


推荐阅读