Pobieranie listy obiektów JSON wykorzystując REST API [JAVA, ANDROID]

0

Witam
Pisze aplikacje, która ma pobierać listę obiektów JSON. Pobierając pojedyncze elementy wszystko jest jak najbardziej oki. Problem zaczyna sie gdy chce pobrać całą listę obiektów. Lista obiektów ma następującą postać:

{
"_embedded" : {
    "auto" : [ {
      "marka" : "FORD",
      "model" : "MUSTANG",
      "opis" : "cos",
      "cena" : "500000",
      "_links" : {
        "self" : {
          "href" : "http://192.168.2.107:8080/auto/1"
        },
        "autoEntity" : {
          "href" : "http://192.168.2.107:8080/auto/1"
        },
        "listaModyfikuje" : {
          "href" : "http://192.168.2.107:8080/auto/1/listaModyfikuje"
        },
        "listaUlubione" : {
          "href" : "http://192.168.2.107:8080/auto/1/listaUlubione"
        }
      }
    }, {
      "marka" : "MERC",
      "model" : "SLS AMG",
      "opis" : "cos",
      "cena" : "200000",
      "_links" : {
        "self" : {
          "href" : "http://192.168.2.107:8080/auto/2"
        },
        "autoEntity" : {
          "href" : "http://192.168.2.107:8080/auto/2"
        },
        "listaModyfikuje" : {
          "href" : "http://192.168.2.107:8080/auto/2/listaModyfikuje"
        },
        "listaUlubione" : {
          "href" : "http://192.168.2.107:8080/auto/2/listaUlubione"
        }
      }
    }, {
      "marka" : "XxX ",
      "model" : "xXx",
      "opis" : "ECO",
      "cena" : "30000 ",
      "_links" : {
        "self" : {
          "href" : "http://192.168.2.107:8080/auto/3"
        },
        "autoEntity" : {
          "href" : "http://192.168.2.107:8080/auto/3"
        },
        "listaModyfikuje" : {
          "href" : "http://192.168.2.107:8080/auto/3/listaModyfikuje"
        },
        "listaUlubione" : {
          "href" : "http://192.168.2.107:8080/auto/3/listaUlubione"
        }
      }
    }, {
      "marka" : "NISSAN",
      "model" : "350Z",
      "opis" : "drift",
      "cena" : "300000",
      "_links" : {
        "self" : {
          "href" : "http://192.168.2.107:8080/auto/4"
        },
        "autoEntity" : {
          "href" : "http://192.168.2.107:8080/auto/4"
        },
        "listaModyfikuje" : {
          "href" : "http://192.168.2.107:8080/auto/4/listaModyfikuje"
        },
        "listaUlubione" : {
          "href" : "http://192.168.2.107:8080/auto/4/listaUlubione"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://192.168.2.107:8080/auto"
    },
    "profile" : {
      "href" : "http://192.168.2.107:8080/profile/auto"
    }
  },
  "page" : {
    "size" : 20,
    "totalElements" : 4,
    "totalPages" : 1,
    "number" : 0
  }
}

Pojedyńczy obiekt ma postać:

{
  "marka" : "FORD",
  "model" : "MUSTANG",
  "opis" : "cos",
  "cena" : "500000",
  "_links" : {
    "self" : {
      "href" : "http://192.168.2.107:8080/auto/1"
    },
    "autoEntity" : {
      "href" : "http://192.168.2.107:8080/auto/1"
    },
    "listaModyfikuje" : {
      "href" : "http://192.168.2.107:8080/auto/1/listaModyfikuje"
    },
    "listaUlubione" : {
      "href" : "http://192.168.2.107:8080/auto/1/listaUlubione"
    }
  }
} 

Kod który wykorzystuje pobierając pojedynczy obiekt:

RestTemplate restTemplate = new RestTemplate();
        Auto auto = restTemplate.getForObject("http://192.168.2.107:8080/auto/2", Auto.class);
        System.out.println(auto.getMarka() + " " + auto.getModel() + " " + auto.getCena() + " " + auto.getOpis()); 

Natomiast do pobierania lsty obiektów znalazłem cos takiego:

RestTemplate restTemplate = new RestTemplate();
Auto[] forNow = restTemplate.getForObject("http://192.168.2.107:8080/auto/", Auto[].class);
        List<Auto> la = Arrays.asList(forNow); 

a także coś takiego:

ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.registerModule(new Jackson2HalModule());

        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
        converter.setObjectMapper(mapper);

        List<HttpMessageConverter<?>> converterList = new ArrayList<HttpMessageConverter<?>>();
        converterList.add(converter);
        RestTemplate restTemplate2 = new RestTemplate(converterList);
        restTemplate2.getForObject("http://192.168.2.101:8080/auto",Auto.class); 

Żaden z nich nie działa poprawnie. Błąd:
java.lang.IllegalStateException: Failed to execute CommandLineRunner

Wykorzystuje do tego oczywiście Springa. Do każdej klasy mam utworzone odpowiednie Repository. Mapowanie poszczególnych klas wydaje mi się ze tez dobrze zrobiłem. Patrząc na format JSONA zastanawia mnie fragment "_embedded" : { .....}. Nidzie nie spotkałem się z podobnym schematem. Dane powinny mieć format : https://spring.io/understanding/HATEOAS

Podpowie ktoś czy powinienem mieć jakoś inaczej zmapowaną bazę danych? Czy błędem jest zły kod odpowiedzialny za odbiór listy obiektów.
Odbiór obiektów testuje na Javie. Później chciałbym to przenieść na Androida.

0

Nie przeczytałem tego co tam masz bo nie ma to większego sensu. Pisanie w Springu żeby później przenieść na Androida. jak coś robisz na Androida niech to będzie na Androida.

lekcja na dziś : http://square.github.io/retrofit/

1 użytkowników online, w tym zalogowanych: 0, gości: 1