2015-03-11 12 views
7

Come posso utilizzare il parametro json nel mio servizio web, posso ottenere i parametri usando @PathParam ma per ottenere i dati JSON come parametro non ho idea di cosa fare.Come utilizzare il parametro json nel servizio restful java

@GET 
@Path("/GetHrMsg/json_data") 
@Consumes({ MediaType.APPLICATION_JSON }) 
@Produces(MediaType.APPLICATION_JSON) 
public String gethrmessage(@PathParam("emp_id") String empid) { 

}

cosa utilizzare al posto di @PathParam e come analizzare in un secondo momento.

risposta

9

Presumo che si stia parlando di consumo di un corpo di messaggio JSON inviato con la richiesta.

In caso affermativo, si prega di notare che, mentre non proibito a titolo definitivo, non v'è un consenso generale che le richieste GET dovrebbero non hanno corpi di richiesta. Vedi la domanda "HTTP GET with request body" per spiegazioni sul perché.

Ne parlo solo perché l'esempio mostra una richiesta GET. Se stai facendo un POST o PUT, continua a leggere, ma se stai davvero facendo una richiesta GET nel tuo progetto, ti consiglio di seguire invece kondu's solution.


Detto questo, per consumare un corpo del messaggio JSON o XML, includono una (non annotate) parametro di metodo che di per sé un fagiolo JAXB che rappresenta il messaggio è.

Quindi, se il vostro corpo del messaggio simile a questo:

{"hello":"world","foo":"bar","count":123} 

Quindi si creerà una corrispondente classe che assomiglia a questo:

@XmlRootElement 
public class RequestBody { 
    @XmlElement String hello; 
    @XmlElement String foo; 
    @XmlElement Integer count; 
} 

e il metodo di servizio sarebbe simile a questa:

@POST 
@Path("/GetHrMsg/json_data") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public void gethrmessage(RequestBody requestBody) { 
    System.out.println(requestBody.hello); 
    System.out.println(requestBody.foo); 
    System.out.println(requestBody.count); 
} 

Quale output:

world 
bar 
123 

Per ulteriori informazioni su come utilizzare i diversi tipi di dati HTTP utilizzando JAXB, mi consiglia di controllare la domanda "How to access parameters in a RESTful POST method", che ha alcuni fantastici informazioni.

+0

Grazie Mi ha aiutato a risolvere l'errore :) –

3

@PathParam viene utilizzato per abbinare una parte dell'URL come parametro. Ad esempio in un URL del modulo http:/example.com/books/{bookid}, è possibile utilizzare @PathParam("bookid") per ottenere l'id di un libro su un metodo.

@QueryParam viene utilizzato per accedere a coppie chiave/valore nella stringa di query dell'URL (la parte dopo?). Ad esempio nell'URL http:/example.com?bookid=1, è possibile utilizzare @QueryParam("bookid") per ottenere il valore di `bookid.

Entrambi questi vengono utilizzati quando l'URL della richiesta contiene alcune informazioni relative ai parametri e si possono utilizzare i dati direttamente nei metodi.

Si prega di specificare il problema in dettaglio se questo post non ti aiuta.

2

Bertag ha ragione riguardo al commento sul GET.Ma se si vuole fare richiesta POST che consuma i dati JSON, allora si può fare riferimento al codice qui sotto:

 @POST 
     @Path("/GetHrMsg/json_data") 
     @Consumes(MediaType.APPLICATION_JSON) 
     public Response gethrmessage(InputStream incomingData) { 
      StringBuilder crunchifyBuilder = new StringBuilder(); 
      try { 
       BufferedReader in = new BufferedReader(new InputStreamReader(incomingData)); 
       String line = null; 
       while ((line = in.readLine()) != null) { 
        crunchifyBuilder.append(line); 
       } 
      } catch (Exception e) { 
       System.out.println("Error Parsing: - "); 
      } 
      System.out.println("Data Received: " + crunchifyBuilder.toString()); 

      // return HTTP response 200 in case of success 
      return Response.status(200).entity(crunchifyBuilder.toString()).build(); 
     } 

Per riferimento si prega di click here

Problemi correlati