4
I am using the Flickr API to get the information from the images, which returns the following JSON:
{"photos":{"page":1,"pages":60,"perpage":100,"total":"5964","photo":[{"id":"21577339501","Owner":"85277110@N02","secret":"31e850dfeb","server":"5785","farm":6,"title":"P1390956","ispublic":1,"isfriend":0,"isfamily":0}, {"id":"21577287101","Owner":"852710@N02","secret":"412990658f","server":"611","farm":1,"title":"P1400012","ispublic":1,"isfriend":0,"isfamily":0}, {continues the list of json objects}]
I do the following code in the Spring controller to rescue the objects:
Collection<Photos> readValues = objectMapper.readValue(new URL(url), new TypeReference<Collection<Photos>>() { });
And returns the following error:
com.fasterxml.Jackson.databind.Jsonmappingexception: Can not deserialize instance of java.util.Arraylist out of START_OBJECT token
I wonder how I can convert this list of objects from the attribute photo that is present in photos for a ArrayList. I have searched the internet for several solutions and so far found none.
Photos.class:
public class Photos {
    @JsonProperty("page")
    private Integer page;
    @JsonProperty("pages")
    private Integer pages;
    @JsonProperty("perpage")
    private Integer perpage;
    @JsonProperty("total")
    private Integer total;
    @JsonProperty("photo")
    @JsonDeserialize(contentAs = Photo.class, as = ArrayList.class)
    private List<Photo> photo;
    public Photos() {}
    public Photos(Integer page, Integer pages, Integer perpage, Integer total,
            List<Photo> photo) {
        super();
        this.page = page;
        this.pages = pages;
        this.perpage = perpage;
        this.total = total;
        this.photo = photo;
    }
    public Photos(List<Photo> photo) {
        super();
        this.photo = photo;
    }
    public Integer getPage() {
        return page;
    }
    public void setPage(Integer page) {
        this.page = page;
    }
    public Integer getPages() {
        return pages;
    }
    public void setPages(Integer pages) {
        this.pages = pages;
    }
    public Integer getPerpage() {
        return perpage;
    }
    public void setPerpage(Integer perpage) {
        this.perpage = perpage;
    }
    public Integer getTotal() {
        return total;
    }
    public void setTotal(Integer total) {
        this.total = total;
    }
    public List<Photo> getPhoto() {
        return photo;
    }
    public void setPhoto(List<Photo> photo) {
        this.photo = photo;
    }
}
Photo.class:
public class Photo {
    @JsonProperty("id")
    private Integer id;
    @JsonProperty("owner")
    private String owner;
    @JsonProperty("secret")
    private String secret;
    @JsonProperty("server")
    private Integer server;
    @JsonProperty("farm")
    private Integer farm;
    @JsonProperty("title")
    private String title;
    @JsonProperty("ispublic")
    private Boolean isPublic;
    @JsonProperty("isfriend")
    private Boolean isFriend;
    @JsonProperty("isfamily")
    private Boolean isFamily;
    public Photo() { }
    public Photo(Integer id, String owner, String secret, Integer server,
            Integer farm, String title, Boolean isPublic, Boolean isFriend,
            Boolean isFamily) {
        super();
        this.id = id;
        this.owner = owner;
        this.secret = secret;
        this.server = server;
        this.farm = farm;
        this.title = title;
        this.isPublic = isPublic;
        this.isFriend = isFriend;
        this.isFamily = isFamily;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getOwner() {
        return owner;
    }
    public void setOwner(String owner) {
        this.owner = owner;
    }
    public String getSecret() {
        return secret;
    }
    public void setSecret(String secret) {
        this.secret = secret;
    }
    public Integer getServer() {
        return server;
    }
    public void setServer(Integer server) {
        this.server = server;
    }
    public Integer getFarm() {
        return farm;
    }
    public void setFarm(Integer farm) {
        this.farm = farm;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Boolean getIsPublic() {
        return isPublic;
    }
    public void setIsPublic(Boolean isPublic) {
        this.isPublic = isPublic;
    }
    public Boolean getIsFriend() {
        return isFriend;
    }
    public void setIsFriend(Boolean isFriend) {
        this.isFriend = isFriend;
    }
    public Boolean getIsFamily() {
        return isFamily;
    }
    public void setIsFamily(Boolean isFamily) {
        this.isFamily = isFamily;
    }
}
Thank you very much for your reply, I will try here, I observed this
photosand I thought with@JsonRootNamewould solve, the idea was even to create an object containing already the list of photos.– Giancarlo Abel Giulian
@Giancarlogiulian OK, anything just let me know that if I need to update my response
– Bruno César
Thank you very much, it worked here, only with the instance of
OutsideObjectyou can already manipulate the information quietly. + 1 and better answer.– Giancarlo Abel Giulian