POST / PUT通过URL路径vs通过JAX-RS Jersey中的参数

时间:2015-03-13 16:24:39

标签: java web-services rest jersey jax-rs

我正在使用RESTful Jersey API在Java中实现web服务。

我有一个使用两种不同方式工作的帖子请求。您可以通过URL将一些内容发布到您的服务器,该URL包含您希望在URL路径本身中发送的字段的值(例如http://server.se/Context_root/value1/value2/..。),按照服务器上定义的正确顺序,您只需:

HttpClient httpclient = new DefaultHttpClient(getHttpParams());    
HttpPost httppost = new HttpPost(url);
HttpResponse response = httpclient.execute(httppost);

或者您始终发布到相同的网址(例如http://server.se/Context_root),并将字段作为参数发送,如下所示:

HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(params));

其中params类似于:

private ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();

您只需为要发送的每个字段添加名称/值对:

params.add(new BasicNameValuePair(field, value));

为什么在同一个API中有两种方法可以做同样的事情?在哪种情况下,一种方式优于另一种方式?

1 个答案:

答案 0 :(得分:1)

通常,路径参数(http://server.se/Context_root/something)将添加到某个对象的上下文中。例如,对于包含一组汽车(库存中有汽车的经销商)的Web服务,您将添加如下汽车: http://something.com/dealer1/cars。使用您的休息服务的PathParam,您可以访问经销商的名称以在其中添加汽车。

相反,如果您添加经销商,则无需指定任何内容(可能是城市除外),然后您将http://something.com/dealers发布新的经销商信息。

REST规范建议不要使用路径参数传递对象的值。

正如维基百科文章所述(http://en.wikipedia.org/wiki/Representational_state_transfer),路径代表资源。