如何在junit中传递删除方法的请求
问题描述:
嗨我有一个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值,使得传递的值的数据可以是删除吗?
答
好的,首先:用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的答案)。
答
恕我直言,这是你的设计问题。
如果你的目的是要删除备用站点和它的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"
}