0

I have some Json in the following form:

"items": [
{
  "id": 1,
  "text": "As a user without a subscription, I get a choice of available ones.",
  "status": "finished",
  "tags": [
    {
      "id": 1234,
      "name": "feature=subs"
    },
    {
      "id": 1235,
      "name": "epic=premium"
    }
  ]
},
{
  "id": 2,
    ...

There are more fields but I have ommitted them for clarity. I am trying to map each story to a Story Class with fields ID, Text, Status and a list of Tags. I've got it working fine using the following:

public Project JsonToProject(byte[] json) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);

    JsonNode rootNode = mapper.readValue(json, JsonNode.class);
    int storyCount = rootNode.get("totalItems").asInt();
    ArrayNode itemsNode = (ArrayNode) rootNode.get("items");

    Project project = new Project();

    for (int i = 0; i < storyCount; i++)
    {
        Story story = JsonToStory(rootNode.get(i));
        project.addStory(story);
    }
return project;
}

Where a project is simple an ArrayList of Stories, and JsonToStory is the following method:

public Story JsonToStory(JsonNode rootNode) throws JsonParseException, JsonMappingException, IOException
{
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    Story story = mapper.readValue(rootNode, Story.class);
    return story;
}

The Story Class is as follows:

public class Story {

    private int id;
    private String text = new String();
    private String status = new String();
    private final List<Tag> tags = new ArrayList<Tag>();

    public void setId(int i)
    {
        id = i;
    }

    public void setText(String s)
    {
        text = s;
    }

    public void setStatus(String s)
    {
        status = s;
    }

    public void setTags(Tag[])
    {
        ???
    }
}

with the get methods and print methods. The Tag Class simply contains two string fields.

I don't know how to structure the setTags method, in order to result in an arraylist of Tag objects, and haven't been able to find anything to help.

Thanks!

Joe
  • 217
  • 5
  • 10

1 Answers1

0

You have marked your tags as final, which will probably block the setter from setting the tags. You can try this:

public class Story {
    private int id;
    private String text = new String();
    private String status = new String();
    private List<Tag> tags;
    public void setTags(List<Tag> tags){
        this.tags = tags;
    }

OR

  public class Story {
    private int id;
    private String text = new String();
    private String status = new String();
    private Tag[] tags;
    public void setTags(Tag[] tags){
        this.tags = tags;
    } 
Biju Kunjummen
  • 49,138
  • 14
  • 112
  • 125