发送在Post上的URI中编码的查询参数也包含json

时间:2016-06-01 12:01:32

标签: java json http-post urlencode

我有一个使用JSON处理POST请求的服务器。它还查找并解码URI中的查询参数。我的Java客户端当前使用HTTPPost通过ContentType application / json发送Json。

我想知道URLEncodeUtil方法格式是否能够实现这一目标。除文档提及外

  

适合用作应用程序/ x-www-form-urlencoded列表   HTTP PUT或HTTP POST中的参数。

所以我的问题是 1.这是否适用于ContenType设置为application / json。 2.是否有另一种方法可以实现服务器所需的内容,即:在URI中编码JSON以及查询参数。

1 个答案:

答案 0 :(得分:1)

通过(HTML spec)发布表单数据有两种官方方法。相关值为application/x-www-form-urlencoded,其中添加?以及URL中编码的名称/值对。如果表单方法是POST,那么它将是HTTP POST语句之后的第一行。

我们在REST Web服务中使用HTTP所做的一切都是有效的HTTP,但不适用于HTML。因此application/json可以包含application/x-www-form-urlencoded样式参数和JSON有效内容的组合。

HTTP请求看起来像这样:

POST /blog/posts?myparam=Something%20Good&token=donotdothis
Accept: application/json
Content-Type: application/json
Content-Length: 57

{"title":"Hello World!","body":"This is my first post!"}

此处还拼写说明:http://www.jsonrpc.org/historical/json-rpc-over-http.html

?标志着额外参数的开始。因此,虽然这在技术上是合法的,但它确实提出了一个问题,即为什么您需要发布的内容不能成为您的JSON的一部分。这种方法的缺点是查询参数都是HTTP日志的一部分,并且非常明显。您绝对不应该将此方法与密码或任何其他个人身份信息一起使用。根据您所在国家/地区的隐私权法律,您希望最大限度地减少不必要的记录,以使合规性更加轻松。