2016-07-17 16 views
0

ich vor kurzem diese Frage gestellt: Question I asked recentlyPOST komplexen Parameter, um REST-Service, Kann ich ein Mock-Formular Vorlage

Ich mag die ruhige Art und Weise, dass Link BTW dargestellt. Die Frage war im Wesentlichen, wie bekomme ich komplexe Parameter zu meinem REST-Service? Wie würden der Code und die Parameter dieses Codes aussehen? Nun, je mehr ich darüber nachdachte, desto mehr erinnerte es mich an eine einfache Webformular-Einreichung. Beachten Sie, dass die Clients dieses Service native Anwendungen sein werden. Warum können die Client-Anwendungen die Variablen in Fragen nicht in ein Key-value-Objekt nach Anfrage zusammenstellen (einschließlich einer Byte-Array-Datei), dieses bündeln und es an meinen Dienst senden, wo die entsprechende Aktion/Antwort stattfinden wird? Ziemlich sicher, dass Java (RESTEasy ist das Framework, das ich verwende) die Anfrage anmutig behandeln kann. Bin ich verrückt oder ist das schon ausgearbeitet?

Als Beispiel dafür, wie das aussehen würde, hat jemand eine Beispiel-HTML-Zeichenfolge, die einen einfachen Beitrag von ein paar Variablen darstellen würde, so?

{ 
    "restriction-type": "boolean-search-restriction", 
    "boolean-logic": "and", 
    "restrictions": [ 
    { 
     "restriction-type": "property-search-restriction", 
     "property": { 
     "name": "name", 
     "type": "STRING" 
     }, 
     "match-mode": "EXACTLY_MATCHES", 
     "value": "admin" 
    }, 
    { 
     "restriction-type": "property-search-restriction", 
     "property": { 
     "name": "email", 
     "type": "STRING" 
     }, 
     "match-mode": "EXACTLY_MATCHES", 
     "value": "[email protected]" 
    } 
    ] 
} 

Aber mit HTML-Header und alle ??? Ich habe dieses Beispiel von hier btw: example JSON post

Antwort

1

Der RestEasy Framework bietet bereits eine JAX-RS client Implementierung, es sei denn, wenn Sie von Grund auf neu starten wollen HttpURLConnection oder sogar HttpClient von Apache HttpComponents verwenden. Jedenfalls, solange die Frage mit RESTEasy zusammenhängt, werde ich ein Beispiel für den letzteren Rahmen geben.

Wenn die Post wie folgt aussieht:

@Path("/client") 
public class ClientResource { 

     @POST 
     @Consumes("application/json") 
     @Produces("application/json") 
     public Response addClient(Client aClient) { 
       String addMessage=clientService.save(aClient); 
       return Response.status(201).entity(addMessage).build(); 
     } 
     ... 
} 

Ein grundlegender RestEasy Client Anruf würde wie folgt aussehen:

public void testClientPost() { 

     try { 

      ClientRequest request = new ClientRequest(
        "http://localhost:8080/RestService/client"); 
      request.accept("application/json"); 
      Client client=new Client(5,"name","login","password"); 
      //convert your object to json with Google gson 
      //https://github.com/google/gson 
      String input = gson.toJson(client); 
      request.body("application/json", input); 
      ClientResponse<String> response = request.post(String.class); 
      if (response.getStatus() != 201) { 
       throw new RuntimeException("Failed : HTTP error code : " 
         + response.getStatus()); 
      } 
      //this is used to read the response. 
      BufferedReader br = new BufferedReader(new InputStreamReader(
        new ByteArrayInputStream(response.getEntity().getBytes()))); 

      String output; 
      System.out.println("Output from Server .... \n"); 
      while ((output = br.readLine()) != null) { 
       System.out.println(output); 
      } 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }