2017-02-23 3 views
1

übergibt Hallo, ich habe eine JSON-Anfrage, die ich in meinem Junit-Testfall übergeben muss, aber die Anfrage ist Löschen als Löschen nicht unterstützen SetEntity-Methode. Wie kann ich die Anfrage in meinem Testfall übergeben? Json Anfrage, die muss ichWie man Anfrage für eine Löschmethode in Junit

{

"userId":"AJudd", 
"siteId":"131", 
"alternateSiteId":"186" 

}

mytest Fall für dieses

@Test 
    public void testdeleteAltSite() throws ClientProtocolException, IOException { 
     String resultCode = "001"; 
     String resultText = "Success"; 
     String url = "http://localhost:8080/adminrest1/alternatesite"; 
     HttpClient client = HttpClientBuilder.create().build(); 
     HttpDelete delete = new HttpDelete(url); 

     // add header 
     delete.addHeader("Transaction-Id", "11"); 
     delete.addHeader("content-type", "application/json"); 
     LOG.info(url); 
     HttpResponse response = client.execute(delete); 

     byte[] buf = new byte[512]; 
     InputStream is = response.getEntity().getContent(); 
     int count = 0; 
     StringBuilder builder = new StringBuilder(1024); 
     while ((count = is.read(buf, 0, 512)) > 0) { 
      builder.append(new String(buf, 0, count)); 
     } 
     String output = builder.toString(); 
     System.out.println(output); 

    }` 

passieren Wie die json Wert zu übergeben, so dass die übergebenen Wertdaten sein kann, gelöscht?

Antwort

0

Ok, zuallererst: Das Senden eines Körpers mit einem DELETE ist nicht das, was normalerweise im Internet passiert. Trotzdem ist es nicht verboten (Is an entity body allowed for an HTTP DELETE request?). Also, zwei Ideen:

1) Neue Klasse

Ich nehme an, Sie org.apache.http.client verwenden: Just erweitern HttpEntityEnclosingRequestBase:

public class HttpDeleteWithEntity extends HttpEntityEnclosingRequestBase { 

    public final static String METHOD_NAME = "DELETE"; 

    public HttpDeleteWithEntity() { 
     super(); 
    } 

    public HttpDeleteWithEntity(final URI uri) { 
     super(); 
     setURI(uri); 
    } 

    public HttpDeleteWithEntity(final String uri) { 
     super(); 
     setURI(URI.create(uri)); 
    } 

    @Override 
    public String getMethod() { 
     return METHOD_NAME; 
    } 

} 

Dies ist im Grunde c & p'ed aus der HttpPost Klasse. Ich habe das nicht getestet, tho.

Dann verwenden Sie Ihre HttpDeleteWithEntity Klasse anstelle von HttpDelete.

2) Verwenden Sie benutzerdefinierte Header

Wenn Sie Ihren Server-Code ändern können, die eine gute Alternative sein könnte.

delete.addHeader("testwith", jsonString); 

oder

delete.addHeader("userId","AJudd"); 
delete.addHeader("siteId","131"); 
delete.addHeader("alternateSiteId","186); 

Schließlich, wenn Sie verantwortlich für die Server-Implementierung sind würde ich Anfragen zu implementieren empfehlen DELETE ohne Körper (Artemisian Antwort sehen).

0

IMHO ist dies ein Problem mit Ihrem Design.

Wenn Ihre Absicht ist einzigartig eine alternative Website und ihre ID löschen dann die alternateSiteId als Teil der URI geben sollte ausreichend:

Method: DELETE 
URL: http://localhost:8080/adminrest1/alternatesite/{alternateSiteId} 

Wenn alternateSiteId nicht eindeutig zuzuordnen sind, dann sind Sie eine Beziehung zu aktualisieren. In diesem Fall sollten Sie ein PUT verwenden, mit dem Sie eine Körperschaft in Ihre Anfrage aufnehmen können. Bitte beachten Sie, dass Sie die ID der Ressource, die Sie als Teil Ihres URI aktualisieren, weitergeben sollten, zum Beispiel:

Method: PUT 
URL: http://localhost:8080/adminrest1/alternatesite/{userId} 
Body:{ 
     "siteId":"131", 
     "alternateSiteId":"186" 
} 
Verwandte Themen