簡體   English   中英

刪除帶參數的休息

[英]Delete rest with parameters

我需要使用 Httpdelete 或任何其他庫在 Java 中編寫此 REST 請求。

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

我找不到解析 Json 數據的方法!

感謝您的幫助!

就像其他人所說的那樣,DELETE 請求包含正文是不尋常的。 但只要服務器支持,也不是絕對不可能。

有很多方法可以用 Java 構建 REST 客戶端(請參閱https://stackoverflow.com/a/5024571/1018443 )。 一種常見的方法是使用 Jersey 2。

在 Jersey 2 中, .delete()方法不包含 body 實體的參數。 但是您可以使用.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;
    }
}

請注意,您需要使用 Property 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/

您必須使用 POST 請求而不是 DELETE,因為 DELETE 請求的正文被忽略。 從規格:

參考鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM