用@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 调用工作正常,但对于我拥有的所有 usersUserGroup 属性始终为空。 我究竟做错了什么? 感谢您的帮助。

注意:我也试过这个 solution 但我得到一个例外

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)