使用参数删除休息

时间:2016-06-14 12:29:46

标签: java json rest http http-delete

我需要使用Httpdelete或任何其他库在java中编写此REST请求。

curl -X DELETE -d '{"ruleid":"1" }' http://192.168.1.1:8080/wm/acl/rules/json

我无法找到解析Json数据的方法!

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您必须使用POST请求而不是DELETE,因为忽略了DELETE请求的主体。 来自规范:

DELETE方法请求源服务器删除Request-URI

标识的资源

答案 1 :(得分:0)

就像其他人说的那样,DELETE请求包含一个正文是不寻常的。但是,只要服务器支持,并不是绝对不可能的。

有很多方法可以用Java构建REST客户端(请参见https://stackoverflow.com/a/5024571/1018443)。一种常见的方法是使用Jersey 2。

在Jersey 2中,.delete()方法不包含正文实体的参数。但是您可以使用.build来创建带有主体的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/