del*_*boy 82 java rest restlet
我正在使用RESTlet,我已经创建了一个资源.我通过重写acceptRepresentation方法来处理POST.
客户端应该向我发送一些数据,然后将其存储到DB,将响应设置为201(SUCCESS_CREATED)并且我需要将一些数据返回给客户端,但是返回类型的acceptRepresentation是无效的.
在我的情况下,我需要返回一些识别器,以便客户端可以访问该资源.
例如,如果我有一个带有URL /资源的资源,并且客户端发送POST请求,我在DB中添加新行,其地址应为/ resource/{id}.我需要发送{id}.
难道我做错了什么?REST原则是否允许在POST后返回一些内容?如果是的话,我怎么能这样做,如果没有办法处理这种情况呢?
Dar*_*ler 89
REST只是说你应该遵循统一的界面.换句话说,它表示你应该根据HTTP规范执行POST应该做的事情.以下是相关规范的引用,
如果在源服务器上创建了资源,则响应应该是201(已创建)并包含描述请求状态的实体,并引用新资源和Location头(请参阅第14.30节).
从中可以看出,您可以在两个位置向客户端指示新创建的资源所在的位置.Location标头应该有一个指向新资源的URL,您也可以返回一个包含详细信息的实体.
我不确定覆盖acceptRepresentation()和覆盖post()之间的区别是什么,但是此示例显示了如何从POST返回响应.
小智 15
我放弃了回复中的任何内容.只需将Location:设置为新创建的资源的(完整)URL即可.
您的描述表明这正是您的语义:
其他任何事情都是多余的.
小智 10
两个不同的问题:
REST应用程序模式是否支持在POST中返回数据?
我不认为REST明确禁止它,但在Darrel的答案中详细说明了首选治疗方法.
RESTlet框架是否允许在POST中返回数据?
是的,即使它返回void,在扩展Resource的类中,您也可以通过getResponse()方法完全访问Response对象对象.因此,您可以使用您想要的任何数据调用getResponse().setEntity().
以任何请求的格式输出它.那可能是:
<success>
<id>5483</id>
</success>
Run Code Online (Sandbox Code Playgroud)
要么:
{ "type": "success", "id": 5483 }
Run Code Online (Sandbox Code Playgroud)
这取决于你通常做什么.如果他们不期望数据,他们应该忽略它,但任何想要正确处理数据的客户都应该能够.
归档时间: |
|
查看次数: |
74225 次 |
最近记录: |