2017-02-23 14 views
1

こんにちは私はjunitテストケースで渡す必要があるjsonリクエストを持っていますが、deleteはsetEntityメソッドをサポートしていません。リクエストをテストケースに渡すにはどうしたらいいですか?私は渡された値のデータをできるようにJSON値を渡す方法このjunitで削除メソッドのリクエストを渡す方法

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

    }` 

ため

{

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

}

MyTestにケースを通過する必要が JSON要求削除?

答えて

0

まず、DELETEを使用して本文を送信することは、通常インターネットの周りで行われることではありません。それにもかかわらず、それは禁止されていません(Is an entity body allowed for an HTTP DELETE request?)。だから、2つのアイデア:ちょうど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; 
    } 

} 

これは& p'ed cは、基本的には

1)新しいクラス

私はあなたがorg.apache.http.clientを使用すると仮定しますHttpPostクラスから取得します。私はこれをテストしなかった、tho。

HttpDeleteの代わりにHttpDeleteWithEntityクラスを使用してください。あなたは良い選択肢かもしれません、サーバーのコードを変更することができる場合

2)は、カスタムヘッダー

を使用してください。

delete.addHeader("testwith", jsonString); 

または

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

最後に、サーバーの実装を担当している場合、私はすべてのボディなしでDELETEリクエストを実装することをお勧めします(artemisianの回答を参照してください)。

0

これは設計上の問題です。

あなたの目的は、代替サイトを削除することであり、そのIDは、URIの一部べき十分なようalternateSiteIdを渡す一意の場合:

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

alternateSiteIdが一意でない場合、あなたは関係を更新しています。その場合、PUTを使用して、あなたの要求にボディを含めることができます。 URIの一部として更新するリソースのIDを渡す必要があります(例:

Method: PUT 
URL: http://localhost:8080/adminrest1/alternatesite/{userId} 
Body:{ 
     "siteId":"131", 
     "alternateSiteId":"186" 
} 
関連する問題