我想用一个body执行一个http删除请求。我正在使用spring框架。
为此,我必须做以下修改:

RestTemplate _deleteManager;
_deleteManager = new RestTemplate();
_deleteManager.setRequestFactory(new HttpComponentsClientHttpRequestFactory() {
    protected HttpUriRequest createHttpRequest(HttpMethod httpMethod, URI uri) {
        if (HttpMethod.DELETE == httpMethod) {
            return new HttpEntityEnclosingDeleteRequest(uri);
        }
        return super.createHttpRequest(httpMethod, uri);
    }
});

public static class HttpEntityEnclosingDeleteRequest extends HttpEntityEnclosingRequestBase {
    public HttpEntityEnclosingDeleteRequest(final URI uri) {
        super();
        setURI(uri);
    }

    @Override
    public String getMethod() {
        return "DELETE";
    }
}

然后我用_deleteManager打电话
_deleteManager.exchange(url, HttpMethod.DELETE, requestEntity, ResponseClass.class);

这可以正常工作,但是在代码中HttpUriRequestHttpEntityEnclosingRequestBase被标记为已弃用。
我应该用什么替代品?我在网上搜索,但什么也没找到。
编辑:或者一个简单的答案来说明如何使用一个body执行删除请求就足够了。
谢谢你

最佳答案

检查6.0的官方变更日志中的related topic。所以你应该使用HttpURLConnection类。
一个例子:

URL url = new URL("your_url");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
    urlConnection.setRequestMethod("DELETE");
    urlConnection.setDoOutput(true);
    // Maybe you should set the request properties here too, but it depends on your body.

    OutputStreamWriter osw = new OutputStreamWriter(urlConnection.getOutputStream());
    osw.write("this_is_the_body");
    osw.flush();

    int HttpResult = urlConnection.getResponseCode();
    if(HttpResult == HttpURLConnection.HTTP_OK) {
        InputStream is = new BufferedInputStream(urlConnection.getInputStream());
        // Handle the response.
    } else {
        // ...
    }
}
finally {
    urlConnection.disconnect();
}

10-07 19:22
查看更多