我正在使用适用于 Android 的 Spring Rest 模板,并将使用 PUT 方法来更新方法。但令人惊讶的是,PUT 方法通常不支持解析结果对象,它们只是 void,为什么呢?我对正确的 REST 支持的理解是应该返回更新的对象。 Spring 这样做的合理性是什么?
2.5.6 HTTP 放置
public void put(String url, Object request, Object... urlVariables) throws RestClientException;
public void put(String url, Object request, Map<String, ?> urlVariables) throws RestClientException;
public void put(String url, Object request, Map<String, ?> urlVariables) throws RestClientException;
http://docs.spring.io/spring-android/docs/1.0.2.BUILD-SNAPSHOT/reference/html/rest-template.html
PUT 类似于更新服务器上的现有记录,因此如果您成功更新某些内容,当您将其更改为该状态时,您本质上应该知道新状态。
也就是说,如果您使用 GET 检索文档,那么您就拥有服务器端表示形式。 如果您随后更改该文档的一个或多个属性,然后将这些更改 PUT 到服务器,则不需要告诉您文档已更改为什么,因为您已经拥有更改后的值,假设服务器返回一个成功响应。
抱歉,Spring
RestTemplate
不适合自定义使用,它是根据 REST 规范使用的。
尝试使用
org.apache.http.impl.client.DefaultHttpClient
或通过 new URL("http:...").openConnection()
根据您的需求提出请求。
因为有反对票让我更好地解释一下:
PUT
方法无效,因为 put 方法的 REST 概念只是仅 PUT 数据并期望在正常情况下得到 OK '200' 响应,仅此而已。
出现错误时,服务必须使用一些 HTTP 错误代码进行响应,这也是该方法抛出异常的原因。