Search code examples
javaserializationobjectmapper

List<Long> is not serialised to String in Java


We have a class Agent with assignedUsers as List<Long>

when we try to convert the object as JSON document, we are using ObjectMapper writeValueAsString method, which does not serialize the ids into String instead the key assignedUsers are not missed in the JSON string.

import java.io.IOException;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;

public class Agent {
private List<Long> assignedUserIds;
        private String name;

        private static final String json = "{\"name\":\"New Agency\", \"assignedUserIds\":[23,24]}";

        public String getName() {
                return name;
        }

        public void setName(final String name) {
                this.name = name;
        }

        public List<Long> gocuetAssignedUserIds() {
        return assignedUserIds;
        }

        public void setAssignedUserIds(final List<Long> assignedUserIds) {
                this.assignedUserIds = assignedUserIds;
        }

        public static void main(String[] args) {
                Agent agencyInfo = null;
                try {
                        agencyInfo = new ObjectMapper().readValue(json, Agent.class);
                        System.out.println("Built Agent :: " + new ObjectMapper().writeValueAsString(agencyInfo)); // Outputs: Built Agent :: {"name":"New Agency"}
                } catch (IOException e) {
                        e.printStackTrace();
                }
        }
}

Solution

  • Your getter for the field assignedUserIds is called gocuetAssignedUserIds(). This is why it's not serialized (the mapper does not recognize it), either mark it with the annotiation @JsonGetter("assignedUserIds") or rename it to getAssignedUserIds() to match the field.