njk2015
njk2015

Reputation: 543

Reading JSON map structure via spring boot

If I have the following JSON structure returned by my REST service:

{
   "foo" : {
      "id" : "baz"
   }
   "qux" : {
      "id" : "toto"
   }
}

To me it looks like a map structure. I am not sure how I can read this using spring boot (via Jackson).

I have defined my JSON bind class like so:

public class Foos {

   private Map<String, Foo> fooInstances;

   private void setFooInstances(Map<String, Foo> fooInstances) {
      this.fooInstances = fooInstances;
   }

   private Map<String, Foo> getFooInstances() {
      return fooInstances;
   }

}

And a Foo instance looks like so:

public class Foo {

   private String id;


   private void setId(String id) {
      this.id = id;
   }

   private String getId() {
      return id;
   }

}

The spring code for making the request is like so:

RestTemplate template = new RestTemplate();
ResponseEntity<Foos> responseEntity = (ResponseEntity<Foos>) template.getForEntity(serviceEndpointURL, Foos.class);

I originally had a START_OBJECT error which I fixed by creating the Foos class with the corresponding map and now I don't get an error. Instead I get a populated ResponseEntity, with a 'Foos' instance, but the map is null. Any idea what I am doing wrong?

Upvotes: 2

Views: 5698

Answers (1)

Coder
Coder

Reputation: 2239

Modify your Foos class like this

public class Foos {

@JsonIgnore
private Map<String, Object> properties = new HashMap<String, Object>();

@JsonAnyGetter
public Map<String, Object> getProperties() {
return this.properties;
}

@JsonAnySetter
public void setProperty(String name, Object value) {
this.properties.put(name, value);
}
}

You can typecast from Object to Foo from the map.

Let me know if you have any questions!!

Upvotes: 4

Related Questions