2015-03-11 4 views
7

Wie kann ich verbrauchen json Parameter in meinem Webservice verbrauchen, ich kann in der Lage, aber die Parameter mit @PathParam bekommt die JSON-Daten als Parameter erhalten haben keine Ahnung, was zu tun.Wie json Parameter in Java geruhsamem Service

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

}

Was anstelle von @PathParam zu verwenden und wie es später zu analysieren.

Antwort

9

Ich gehe davon aus, dass Sie mit der Bitte geschickt sprechen einen JSON-Nachrichtentext zu verbrauchen.

Wenn ja, bitte beachten Sie, dass, obwohl nicht ganz verboten, gibt es eine allgemeine Übereinstimmung, dass GET-Anfragen sollten nicht Anfrage haben Körper. Siehe die "HTTP GET with request body" Frage für Erklärungen warum.

Ich erwähne dies nur, weil Ihr Beispiel eine GET-Anfrage zeigt. Wenn Sie einen POST oder PUT machen, lesen Sie weiter, aber wenn Sie wirklich eine GET-Anfrage in Ihrem Projekt machen, empfehle ich stattdessen, dass Sie kondu's solution folgen.


dies gesagt wurde, einen JSON oder XML-Nachrichtentext zu verbrauchen, gehören (unkommentierten) -Methode Parameter, der selbst ein JAXB bean, die die Nachricht ist.

Also, wenn Ihr Nachrichtentext wie folgt aussieht:

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

Dann erhalten Sie eine entsprechende Klasse erstellen, die wie folgt aussieht:

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

Und Ihre Service-Methode würde wie folgt aussehen:

@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); 
} 

Welche Ausgabe würde:

world 
bar 
123 

Weitere Informationen über die verschiedenen Arten von HTTP-Daten mit JAXB verwenden, würde ich empfehlen, die Frage check out „How to access parameters in a RESTful POST method“, die einige fantastische Informationen hat.

+0

Dank es mir geholfen, den Fehler zu beheben :) –

3

@PathParam wird verwendet als ein Parameter, der einen Teil des URL zu entsprechen. Zum Beispiel können Sie in einer URL des Formulars http:/example.com/books/{bookid}@PathParam("bookid") verwenden, um die ID eines Buchs zu einer Methode zu erhalten.

@QueryParam verwendeten Schlüssel/Wert-Paare in der Abfragezeichenfolge der URL zuzugreifen (der Teil nach dem?). Zum Beispiel können Sie in der URL http:/example.com?bookid=1@QueryParam("bookid") verwenden, um den Wert von `bookid zu erhalten.

Beide diese verwendet werden, wenn die Anfrage-URL einige Informationen enthält die Parameter in Bezug auf und die Daten direkt in Ihre Methoden verwenden können.

Bitte geben Sie das Problem im Detail, wenn dieser Beitrag Ihnen nicht hilft.

2

Bertag hat Recht mit dem Kommentar zum GET.Aber wenn Sie POST-Anforderung tun mögen, die JSON-Daten verbraucht, dann können Sie den Code zu finden unter:

 @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(); 
     } 

Zur Referenzierung bitte click here