在Java中,如何设置Restlet响应的头?
我似乎不知道如何向restlet响应添加标题。当我查看在Java中,如何设置Restlet响应的头?,java,http-headers,response,restlet,Java,Http Headers,Response,Restlet,我似乎不知道如何向restlet响应添加标题。当我查看Response对象中的可用方法时,我看到的只是setStatus、setEntity和setAttributes,但这些都没有告诉我如何在响应上设置自定义http头 例如,我有一个GET调用,返回如下内容: HTTP/1.1 200 OK Content-Type: text/json Content-Length: 123 Some-Header: the value Some-Other-Header: another value {
Response
对象中的可用方法时,我看到的只是setStatus
、setEntity
和setAttributes
,但这些都没有告诉我如何在响应上设置自定义http头
例如,我有一个GET
调用,返回如下内容:
HTTP/1.1 200 OK
Content-Type: text/json
Content-Length: 123
Some-Header: the value
Some-Other-Header: another value
{
id: 111,
value: "some value this could be anything",
diagnosis: {
start: 12552255,
end: 12552261,
key: "ABC123E11",
source: "S1",
}
}
不管怎样。在handleGet
方法中,我这样处理它:
final MediaType textJsonType = new MediaType("text/json");
@Override
public void handleGet() {
log.debug("Handling GET...");
final Response res = this.getResponse();
try {
final MyObject doc = this.getObj("hello", 1, "ABC123E11", "S1");
final String docStr = doc.toString();
res.setStatus(Status.SUCCESS_OK);
res.setEntity(docStr, textJsonType);
// need to set Some-header, and Some-other-header here!
}
catch(Throwable t) {
res.setStatus(Status.SERVER_ERROR_INTERNAL);
res.setEntity(new TextRepresentation(t.toString()));
}
}
因为Restlet更多地是关于REST体系结构原则而不是HTTP,所以它尝试与协议无关,并且不直接公开HTTP头。但是,它们存储在响应的
org.restlet.http.headers
属性中(作为表单
)。请注意,您只能以这种方式设置自定义标题,而不能设置标准标题(这些标题由框架直接处理,例如,内容类型
取决于表示形式
媒体类型)
请参见以下示例:
(链接内容也可从中获得)。只是想知道为什么要覆盖
资源中的handleGet
。在Restlet 1.1中,您可能希望使用representation
(并让handleGet
执行其逻辑(据我所知,包括内容类型协商);在Restlet 2中,您可能希望覆盖get()
在服务器资源中
或使用@Get
注释。@布鲁诺,似乎我在互联网上看到的每个例子都有不同的做法。我将继续使用表示
而不是handleGet。但是你知道我将如何处理放置
和删除
吗?在Restlet 1.1中,它是storeRepresentation
用于PUT,而removeerepresentation
用于DELETE(请参阅)。您现在还可以使用Restlet 2(在这种情况下,它是PUT(Representation)
和DELETE()
,或者您可以使用@PUT
和@DELETE
注释)@E_net4,我又添加了一个链接。两个链接都断了,请你在回答中加个例子好吗?谢谢