Markus G. Markus G. - 5 months ago 79
JSON Question

Spring Boot RestTemplate List

I get a response like this:


Now I wanted to Map this data to my class DTO but there I get an "error" because the DTO has no
field. I want it in a
or Array of my class.

List<MyClass> list = restTemplate.getForObject(url, MyClass.class);

I hope you know what I mean?


One approach comes to mind is to convert the JSON response to a Map<String, List<MyClass>> and then query the map, i.e. map.get("data"), to get the actual List<MyClass>.

In order to convert the JSON response to Map<String, List<MyClass>>, you need to define a Type Reference:

ParameterizedTypeReference<Map<String, List<MyClass>>> typeRef = 
                           new ParameterizedTypeReference<Map<String, List<MyClass>>>() {};

Then pass that typeRef to the exchange method like the following:

ResponseEntity<Map<String, List<MyClass>>> response = 
                       , HttpMethod.GET, null, typeRef);

And finally:


If you're wondering why we need a type reference, consider reading Neal Gafter's post on Super Type Tokens.

Update: If you're going to deserialize the following schema:

    "data": [],
    "paging": {}

It's better to create a dumb container class like the following:

class JsonHolder {
    private List<MyClass> data;
    private Object paging; // You can use custom type too.

    // Getters and setters

Then use it in your RestTemplate calls:

JsonHolder response = restTemplate.getForObject(url, JsonHolder.class);
System.out.println(response.getData()); // prints a List<MyClass>
System.out.println(response.getPaging()); // prints an Object