Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将嵌套JSON映射到Java POJO_Java_Json_Spring Boot_Jackson - Fatal编程技术网

将嵌套JSON映射到Java POJO

将嵌套JSON映射到Java POJO,java,json,spring-boot,jackson,Java,Json,Spring Boot,Jackson,我很难使用Jackson将嵌套JSON响应映射到POJO。此时,Users类中的值返回为null JSON: POJO: 控制器方法: private ObjectMapper mapper = new ObjectMapper(); ResponseEntity<String> response = restTemplate.exchange( accountUrl, HttpMethod.GET, entity, String.class); Users us

我很难使用Jackson将嵌套JSON响应映射到POJO。此时,Users类中的值返回为null

JSON:

POJO:

控制器方法:

private ObjectMapper mapper = new ObjectMapper();

ResponseEntity<String> response = restTemplate.exchange(
        accountUrl, HttpMethod.GET, entity, String.class);

Users user = mapper.readValue(response.getBody(), Users.class);
private ObjectMapper mapper=new ObjectMapper();
ResponseEntity response=restemplate.exchange(
accountUrl、HttpMethod.GET、entity、String.class);
Users user=mapper.readValue(response.getBody(),Users.class);
我如何着手解决这个问题


感谢
用户
JSON对象
被包装在
JSON数组
中,该数组被包装在root
JSON对象
中。您需要使用集合类型:

TypeReference<Map<String, List<Users>>> usersType = new TypeReference<Map<String, List<Users>>>() {};
Map<String, List<Users>> wrappedUsers = mapper.readValue(body, usersType);
List<Users> users = wrappedUsers.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
另见:


您的POJO似乎已正确设置了所有内容。但是您尝试使用的JSON是一个对象集合。因此,您应该使用:
List user=mapper.readValue(response.getBody(),new-TypeReference(){})
Hi,我刚刚尝试过,但不幸地得到了以下错误:com.fasterxml.jackson.databind.exc.MismatchedInputException:无法反序列化
java.util.ArrayList
out-START\u-OBJECT-token..Ahhh我看到您正在使用jackson进行JSON绑定。我建议更新到更新的Jakarta EE JSON绑定库,比如Yasson。使用这个库,您可以使用以下语法使用一个列表:谢谢您的跟进,但我最终创建了一个包装类作为实现。我添加了包装类,它工作得很好。还有一个问题,如果你不介意的话。。。使用User类这样我就可以像:wrappedUsers.users.get(0.getUsername())那样访问它,这样做还有意义吗?还是认为这是不必要的?Thanks@user2047296实际上,这只取决于你和你喜欢什么。我可能会得到用户:
Users user=wrappedUsers.getUsers().get(0)包装器类仅用于反序列化,因此不应将其传递到应用程序的其他层。这是有意义的,感谢您的解释:)我的问题听起来与此非常相似。我不确定我到底需要为我的案子改变什么。你能帮我回答这个问题吗?我没时间了:(@MichałZiober)
private ObjectMapper mapper = new ObjectMapper();

ResponseEntity<String> response = restTemplate.exchange(
        accountUrl, HttpMethod.GET, entity, String.class);

Users user = mapper.readValue(response.getBody(), Users.class);
TypeReference<Map<String, List<Users>>> usersType = new TypeReference<Map<String, List<Users>>>() {};
Map<String, List<Users>> wrappedUsers = mapper.readValue(body, usersType);
List<Users> users = wrappedUsers.values().stream().flatMap(Collection::stream).collect(Collectors.toList());
class UsersHolder {
    public List<Users> users;

    //getters, setters
}
UsersHolder wrappedUsers = mapper.readValue(body, UsersHolder.class);
System.out.println(wrappedUsers.users);