Невозможно десериализовать экземпляр java.util.ArrayList из токена START_OBJECT из моего основного класса pojo, для элементов типа POJO <generic>

У меня был этот вопрос раньше и разрешил его, поставив - @JsonIgnoreProperties(ignoreUnknown = true)

но теперь эта ошибка обрезана для разных наборов, но ignoreUnkown=true больше не разрешается. Я получаю следующую ошибку -

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: http://www.dishanywhere.com/radish/v20/dol/home/carousels/Movies.json; line: 1, column: 2787] (through reference chain: featuredMovies.JsonGenMov["tomatometer"])

вот мой основной класс POJO -

package featuredMovies;

import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;



@JsonIgnoreProperties(ignoreUnknown = true)
public class JsonGenMov{
    private String _type;
    private List cast;
    private Common_sense_data common_sense_data;
    private String common_sense_id;
    private List crew;
    private Number critics_rating;
    private String description;
    private Number franchise_id;
    private List genres;
    private String guid;
    @JsonProperty("image")
    private Images images;
    private boolean is_locked;
    private boolean is_mobile;
    private boolean is_parental_locked;
    private String kind;
    private List<String> mobile_networks;
    private List mobile_streams;
    private String mpaa_rating;
    private String name;
    private List<Networks> networks;
    private List<String> platforms;
    private String player_type;
    private String rating;
    private List ratings;
    private String release_date;
    private Number run_time;
    private String slug;
    private String tms_id;
    private List<Tomatometer> tomatometer;
    public JsonGenMov(){

        networks = new ArrayList<Networks>();

    }

    public String get_type(){
        return this._type;
    }
    public void set_type(String _type){
        this._type = _type;
    }
    public List getCast(){
        return this.cast;
    }
    public void setCast(List cast){
        this.cast = cast;
    }
    public Common_sense_data getCommon_sense_data(){
        return this.common_sense_data;
    }
    public void setCommon_sense_data(Common_sense_data common_sense_data){
        this.common_sense_data = common_sense_data;
    }
    public String getCommon_sense_id(){
        return this.common_sense_id;
    }
    public void setCommon_sense_id(String common_sense_id){
        this.common_sense_id = common_sense_id;
    }
    public List getCrew(){
        return this.crew;
    }
    public void setCrew(List crew){
        this.crew = crew;
    }
    public Number getCritics_rating(){
        return this.critics_rating;
    }
    public void setCritics_rating(Number critics_rating){
        this.critics_rating = critics_rating;
    }
    public String getDescription(){
        return this.description;
    }
    public void setDescription(String description){
        this.description = description;
    }
    public Number getFranchise_id(){
        return this.franchise_id;
    }
    public void setFranchise_id(Number franchise_id){
        this.franchise_id = franchise_id;
    }
    public List getGenres(){
        return this.genres;
    }
    public void setGenres(List genres){
        this.genres = genres;
    }
    public String getGuid(){
        return this.guid;
    }
    public void setGuid(String guid){
        this.guid = guid;
    }
    public Images getImages(){
        return this.images;
    }
    public void setImages(Images images){
        this.images = images;
    }
    public boolean getIs_locked(){
        return this.is_locked;
    }
    public void setIs_locked(boolean is_locked){
        this.is_locked = is_locked;
    }
    public boolean getIs_mobile(){
        return this.is_mobile;
    }
    public void setIs_mobile(boolean is_mobile){
        this.is_mobile = is_mobile;
    }
    public boolean getIs_parental_locked(){
        return this.is_parental_locked;
    }
    public void setIs_parental_locked(boolean is_parental_locked){
        this.is_parental_locked = is_parental_locked;
    }
    public String getKind(){
        return this.kind;
    }
    public void setKind(String kind){
        this.kind = kind;
    }
    public List getMobile_networks(){
        return this.mobile_networks;
    }
    public void setMobile_networks(List mobile_networks){
        this.mobile_networks = mobile_networks;
    }
    public List getMobile_streams(){
        return this.mobile_streams;
    }
    public void setMobile_streams(List mobile_streams){
        this.mobile_streams = mobile_streams;
    }
    public String getMpaa_rating(){
        return this.mpaa_rating;
    }
    public void setMpaa_rating(String mpaa_rating){
        this.mpaa_rating = mpaa_rating;
    }
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }
    public List getNetworks(){
        return this.networks;
    }
    public void setNetworks(List networks){
        networks.add(networks);
          this.networks = networks.subList(0, 1);
    }
    public List getPlatforms(){
        return this.platforms;
    }
    public void setPlatforms(List platforms){
        this.platforms = platforms;
    }
    public String getPlayer_type(){
        return this.player_type;
    }
    public void setPlayer_type(String player_type){
        this.player_type = player_type;
    }
    public String getRating(){
        return this.rating;
    }
    public void setRating(String rating){
        this.rating = rating;
    }
    public List getRatings(){
        return this.ratings;
    }
    public void setRatings(List ratings){
        this.ratings = ratings;
    }
    public String getRelease_date(){
        return this.release_date;
    }
    public void setRelease_date(String release_date){
        this.release_date = release_date;
    }
    public Number getRun_time(){
        return this.run_time;
    }
    public void setRun_time(Number run_time){
        this.run_time = run_time;
    }
    public String getSlug(){
        return this.slug;
    }
    public void setSlug(String slug){
        this.slug = slug;
    }
    public String getTms_id(){
        return this.tms_id;
    }
    public void setTms_id(String tms_id){
        this.tms_id = tms_id;
    }
    public List<Tomatometer> getTomatometer(){
        return this.tomatometer;
    }
    public void setTomatometer(List<Tomatometer> tomatometer){
        this.tomatometer = tomatometer;
    }
}

здесь находится Tomatometer POJO -

package featuredMovies;

import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class Tomatometer{
    private Number critic_review_count;
    private String critic_review_url;
    private Number critic_score;
    private Number fan_review_count;
    private String fan_review_url;
    private Number fan_score;

    public Number getCritic_review_count(){
        return this.critic_review_count;
    }
    public void setCritic_review_count(Number critic_review_count){
        this.critic_review_count = critic_review_count;
    }
    public String getCritic_review_url(){
        return this.critic_review_url;
    }
    public void setCritic_review_url(String critic_review_url){
        this.critic_review_url = critic_review_url;
    }
    public Number getCritic_score(){
        return this.critic_score;
    }
    public void setCritic_score(Number critic_score){
        this.critic_score = critic_score;
    }
    public Number getFan_review_count(){
        return this.fan_review_count;
    }
    public void setFan_review_count(Number fan_review_count){
        this.fan_review_count = fan_review_count;
    }
    public String getFan_review_url(){
        return this.fan_review_url;
    }
    public void setFan_review_url(String fan_review_url){
        this.fan_review_url = fan_review_url;
    }
    public Number getFan_score(){
        return this.fan_score;
    }
    public void setFan_score(Number fan_score){
        this.fan_score = fan_score;
    }
}

EDIT: функция Parser, которую я использую, чтобы получить значения из моего класса POJO Tomatometer -

@SuppressWarnings("rawtypes")
  public String[] getMovieTomatoMeterGopherParser (String url) throws JsonParseException, JsonMappingException, IOException{

        System.err.println("STAGE 1");
        URL jsonUrl = new URL(url);
        ObjectMapper objmapper = new ObjectMapper();
        objmapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        List<Tomatometer> jsonGenMovMovie_1 = objmapper.readValue(jsonUrl, new TypeReference<List<Tomatometer>>() {});
        List<Tomatometer>[] Tmeter = new List [jsonGenMovMovie_1.size()]; 
        String[] MoviesTmeter = new String[jsonGenMovMovie_1.size()];
        int i = 0;
        for(Tomatometer element : jsonGenMovMovie_1){
            Tmeter[i]= element.getCritic_review_url();
            MoviesTmeter[i]=Tmeter[i].toString();
            i++;
        }
        return MoviesTmeter;    
    }

и здесь находится ERROR -

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [Source: http://www.dishanywhere.com/radish/v20/dol/home/carousels/Movies.json; line: 1, column: 2787] (through reference chain: featuredMovies.JsonGenMov["tomatometer"])
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:163)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:588)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:582)
    at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.handleNonArray(StringCollectionDeserializer.java:216)
    at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:164)
    at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:154)
    at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:19)
    at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:336)
    at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:89)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:290)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:226)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:203)
    at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2563)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1789)
    at final2.GopherMovieParsing.getMovieNamesGopherParser(GopherMovieParsing.java:96)
    at final2.GopherMovieParsing.main(GopherMovieParsing.java:27)

Ответы

Ответ 1

Джексон говорит вам

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token
 at [...] (through reference chain: featuredMovies.JsonGenMov["tomatometer"])

Другими словами, он нашел поле, которое соответствует свойству POJO JsonGenMov#tomatometer, которое объявлено как List.

private List<Tomatometer> tomatometer;

Джексон десериализует массивы JSON в экземпляры ArrayList по умолчанию. Однако Джексон нашел объект JSON, где ожидал, что массив JSON. Ваше POJO просто не соответствует вашему JSON.