删除带有参数的其余部分
Delete rest with parameters
我需要使用 Httpdelete 或任何其他库在 java 中编写此 REST 请求。
curl -X DELETE -d '{"ruleid":"1" }' http://192.168.1.1:8080/wm/acl/rules/json
我找不到解析 Json 数据的方法!
感谢您的帮助!
您必须使用 POST 请求而不是 DELETE,因为 DELETE 请求的正文将被忽略。
来自规格:
DELETE方法请求源服务器删除由Request-URI标识的资源
正如其他人所说,DELETE 请求包含 body 是不寻常的。但是只要服务器支持,也不是绝对不可能。
在 Java 中有很多构建 REST 客户端的方法(参见 https://whosebug.com/a/5024571/1018443)。一种常见的方法是使用 Jersey 2.
在 Jersey 2 中,.delete()
方法不包含 body 实体的参数。但是您可以使用 .build
创建带有 body 的 DELETE 请求。这是一个例子:
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
public class RestClient {
public static void main(String[] args) {
Model model = new Model();
ClientConfig config = new ClientConfig();
config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target("http://192.168.1.1:8080/");
String response = target
.path("wm/acl/rules/json")
.request(MediaType.APPLICATION_JSON)
.build("DELETE", Entity.entity(model, MediaType.APPLICATION_JSON))
.invoke(String.class);
System.out.println(response);
}
private static class Model {
public int ruleid = 1;
}
}
注意需要配置客户端属性ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION = true
。否则你会得到一个例外:Entity must be null for http method DELETE.
您会发现许多关于如何使用 Jersey 构建 Java REST 客户端的示例。例如:https://howtodoinjava.com/jersey/jersey-restful-client-examples/
我需要使用 Httpdelete 或任何其他库在 java 中编写此 REST 请求。
curl -X DELETE -d '{"ruleid":"1" }' http://192.168.1.1:8080/wm/acl/rules/json
我找不到解析 Json 数据的方法!
感谢您的帮助!
您必须使用 POST 请求而不是 DELETE,因为 DELETE 请求的正文将被忽略。 来自规格:
DELETE方法请求源服务器删除由Request-URI标识的资源
正如其他人所说,DELETE 请求包含 body 是不寻常的。但是只要服务器支持,也不是绝对不可能。
在 Java 中有很多构建 REST 客户端的方法(参见 https://whosebug.com/a/5024571/1018443)。一种常见的方法是使用 Jersey 2.
在 Jersey 2 中,.delete()
方法不包含 body 实体的参数。但是您可以使用 .build
创建带有 body 的 DELETE 请求。这是一个例子:
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
public class RestClient {
public static void main(String[] args) {
Model model = new Model();
ClientConfig config = new ClientConfig();
config.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
Client client = ClientBuilder.newClient(config);
WebTarget target = client.target("http://192.168.1.1:8080/");
String response = target
.path("wm/acl/rules/json")
.request(MediaType.APPLICATION_JSON)
.build("DELETE", Entity.entity(model, MediaType.APPLICATION_JSON))
.invoke(String.class);
System.out.println(response);
}
private static class Model {
public int ruleid = 1;
}
}
注意需要配置客户端属性ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION = true
。否则你会得到一个例外:Entity must be null for http method DELETE.
您会发现许多关于如何使用 Jersey 构建 Java REST 客户端的示例。例如:https://howtodoinjava.com/jersey/jersey-restful-client-examples/