我的Web服务是一个java servlet,它接受带有url params的put请求来执行特定操作。下面的代码得到了我想要做的,但我想知道是否有更好的方法来制作一个put请求而不添加多部分体。
Java Servlets中的所有put请求是否都需要多部分体?
使用okhttp3进行的所有请求是否需要多部分主体?
我是否误解别的东西?
body = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("", "") // I would love to eliminate this.
.build();
request = new Request.Builder()
.url(url + "?my_param=" + URLEncoder.encode(myParam, "utf-8"))
.put(body)
.build();
response = client.newCall(request).execute();
答案 0 :(得分:1)
从实用的角度来看,我说你正在考虑Servlets和/或OkHttp的实现限制,并且它可能可以使用不同的库来工作。
然而,
从标准视图来看,我认为你的方法不正确,你应该使用POST而不是PUT。这需要在POST请求中同时阅读RFC-2616 (HTTP/1.1)第9.6节,在查询字符串上阅读RFC-1630 (URL's in WWW)部分。
从HTTP规范,第9.6节:
POST和PUT请求之间的根本区别体现在Request-URI的不同含义上。 POST请求中的URI标识将处理所包含实体的资源。该资源可能是数据接受过程,某些其他协议的网关或接受注释的单独实体。相反,PUT请求中的URI标识请求附带的实体 - 用户代理知道URI的用途,并且服务器不得尝试将请求应用于其他资源。
根据网址规范,第6页:
QUERY STRINGS
问号("?",ASCII 3F十六进制)用于界定可查询对象的URI与用于表示该对象上的查询的一组单词之间的边界。使用此表单时,组合URI表示由应用于原始对象的查询产生的对象。
这两者结合起来意味着你不能以你想要的方式使用PUT请求。