Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I serialize this JSON using Jackson annotations?

I have the following JSON :

{ 
    fields : {
            "foo" : "foovalue",
            "bar" : "barvalue"
    }
}

I wrote a pojo as follows :

public class MyPojo {

    @JsonProperty("fields") 
    private List<Field> fields;

    static class Field {
        @JsonProperty("foo") private String foo;
        @JsonProperty("bar") private String bar;

        //Getters and setters for those 2
}

This fails obviously, because my json field "fields" is a hashmap, and not a list.
My question is : is there any "magic" annotation that can make Jackson recognize the map keys as pojo property names, and assign the map values to the pojo property values ?

P.S.: I really don't want to have my fields object as a...

private Map<String, String> fields;

...because in my real-world json I have complex objects in the map values, not just strings...

Thanks ;-)

Philippe

like image 926
Philippe Avatar asked Dec 10 '10 15:12

Philippe


1 Answers

Ok, for that JSON, you would just modify your example slightly, like:

public class MyPojo {
  public Fields fields;
}

public class Fields {
  public String foo;
  public String bar;
}

since structure of objects needs to align with structure of JSON. You could use setters and getters instead of public fields of course (and even constructors instead of setters or fields), this is just the simplest example.

Your original class would produce/consume JSON more like:

{ 
  "fields" : [
    {
      "foo" : "foovalue",
      "bar" : "barvalue"
    }
  ]
}

because Lists map to JSON arrays.

like image 137
StaxMan Avatar answered Oct 29 '22 05:10

StaxMan