Jak najprościej sparsować JSON z WebService?

0

Cześć,
Jaki jest wzorcowy sposób parsowania usług JSON?

Scenariusz jest następujący:

  1. Mam usługę która zwraca JSON w JAX-RS.
  2. Chcę sobie z tego zrobić POJO.

Czy następujący sposób jest optymalny:

  1. zrobić GET za pomocą Apache Http Client 2
  2. sparsować za pomocą JSON simple

Jak to robią biali ludzie? Pytam, bo do tej pory wystawiałem tylko serwery REST. A SOAP pięknie konsumowało się za pomocą wsimport. Ręczne parsowanie JSON wydaje mi się toporne w stosunku do wsimport.

Dodam od siebie, że chodzi o wymianę JSON pomiędzy wieloma mikrousługami. Konsumowałem JSON w JS, a tam miałem już gotowy obiekt.

Pozdrawiam,

1

Jeśli te odpowiedzi mają "stały format" to przecież możesz skorzystać z Gson czy Jacksona. Robisz klase POJO której struktura się zgadza z JSONem i tyle :)
Taki ObjectMapper może mieć w argumencie Class tego POJO i sam dokona mapowania

0

A czy używacie generatorów kodu? Znalazłem na przykład taki:
http://www.jsonschema2pojo.org/
Na 1 rzut oka wydaje się być sensowny.

0

Tak jak mówi @scibi92 - Jackson, skonfigurowany ObjectMapper i jechana

0

Na szybko zastosowałem na szybko JAX-RS 2 client API. W przyszłości się również Waszemu rozwiązaniu.

0

Masz to już wbudowane w JAX-RS, ew. możesz użyć JSON-B które ma być dopiero w JavaEE8, ale możesz użyć referencyjnej implementacji http://json-b.net/

OrderCreateRequest orderCreateRequest =  new OrderCreateRequest( ... );
Client client = ClientBuilder.newClient(); 
Response response = client.target( this.ordersEnpoint )
                          .request(MediaType.APPLICATION_JSON_TYPE)
                          .post(Entity.json( orderCreateRequest ));
if( response.getStatus() != 200 ){
    String errorMsg = response.readEntity(String.class);
    client.close();
    throw new RuntimeException( this.getClass().getName()+": "+errorMsg );
}
/* JSON-B way:
ObjectMapper jsonMapper = new ObjectMapper();
OrderCreateResponse orderCreateResponse = jsonMapper.readValue( responseJsonString, 
                                                                OrderCreateResponse.class); */
//JAX-RS way:
OrderCreateResponse orderCreateResponse = response.readEntity(OrderCreateResponse.class);
client.close();
return orderCreateResponse;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.