2017-02-23 64 views
1

嗨我有一个json请求,我必须在我的junit测试用例中传递,但是请求被删除,因为删除不支持setEntity方法。我如何在我的测试用例中传递请求。 JSON请求我要通过如何在junit中传递删除方法的请求

{

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

}

mytest的情况下对本

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

    }` 

如何传递JSON值,使得传递的值的数据可以是删除吗?

回答

0

好的,首先:用DELETE发送一个正文并不是通常在互联网上发生的事情。尽管如此,它并没有被禁止(Is an entity body allowed for an HTTP DELETE request?)。所以,两个想法:

1)新类

我假设你使用org.apache.http.client:只是延长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从HttpPost类。我没有测试这个,寿。

然后使用您的HttpDeleteWithEntity类而不是HttpDelete

2)使用自定义页眉

如果你可以修改服务器代码,可能是一个很好的选择。

delete.addHeader("testwith", jsonString); 

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

最后,如果你是负责服务器实现的,我会建议落实DELETE请求没有任何机构(见artemisian的答案)。

0

恕我直言,这是你的设计问题。

如果你的目的是要删除备用站点和它的ID是唯一的,然后传递alternateSiteId作为URI应该足够的一部分:

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

如果alternateSiteId不是唯一的,那么你正在更新的关系。在这种情况下,您应该使用PUT,它允许您在请求中包含正文。请注意,您应该将您正在更新的资源的ID作为URI的一部分传递给您,例如:

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