I know this may be simple. However, I just can\'t get it to work.
So I am trying to use Spring RestTemplate to map my JSON data. I have following JSON response from a re
I know this is an old thread.
But for anyone having the same problem, you can use MappingJackson2HttpMessageConverter
for this purpose with Jackson.
Please refer the answer given in this thread.
Please use private List<Data> data = new AllarList<Data>( )
;
and please provide getters( ) and setters( ) methods in both the classes.
Put @JsonInclude(Include.NON_EMPTY)
above Data class
Please add below dependencies under section at your main POM.xml file and do maven compile. Then I guess your issue will get resolved.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.8.8</version>
</dependency>
I ran into the same issue. Annotate with @JsonProperty
:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Data implements Serializable {
@JsonProperty("Name")
private String name;
@JsonProperty("Address")
private String address;
// getters / setters for name and address
}
The fields of your Data
class should now get populated, and you can name your fields independent of the JSON representation (e.g. name
instead of Name
).
I was having a similar issue with RestTemplate not mapping nested JSON objects to my class model also, after much frustration I decided to retrieve my JSON as a String(instead of converting directly to my target object) using RestTemplate and then use the google Gson library to convert my String to my target entity.
pom.xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
code to call RestTemplate:
ResponseEntity<String> responseEntity = restTemplate.getForEntity(Url,String.class);
Gson gson = new GsonBuilder().create();
Response reponse = gson.fromJson(responseEntity , Response.class);
Unfortunately I was unable to find out why my nested objects were not mapped using RestTemplate the first place but I hope this workaround helps!
Annotate property "data" with @JsonUnwrapped as below
@JsonIgnoreProperties(ignoreUnknown = true)
public class Response implements Serializable {
private String message;
private String status;
@JsonUnwrapped
private List<Data> data;
}
If you need only print data, you can do this
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(
"your url",
String.class);
System.out.println(response);