如何设置"接受"和"内容类型" Restlet 2.3.4中的标题

时间:2015-09-05 07:21:15

标签: restlet

我想在 Restlet 2.3.4 中设置"Content-Type"="application/json""Accept"="application/json"

在2.3.4之前我使用了以下代码并且它有效:

Series<Header> requestHeaders=(Series<Header>)cr.getRequestAttributes().get(HeaderConstants.ATTRIBUTE_HEADERS);
if(requestHeaders==null){
   requestHeaders=new Series(Header.class);
   cr.getRequestAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS, requestHeaders);
}
requestHeaders.add(new Header(key,value));

2 个答案:

答案 0 :(得分:1)

Content-Type应设置为您要发送到服务器的Representation对象的一部分(其他表示可用)。

new StringRepresentation("{}", MediaType.APPLICATION_JSON);

理想情况下,应使用ClientResource#accept(Metadata) JavaDoc来设置接受标头。我假设您的实例对象cr是您的实体对象,请明确说明。此方法是ClientInformation对象的快捷方式。

鉴于MediaType延伸Metadata,这就变成了。

cr.accept(MediaType.APPLICATION_JSON);  

答案 1 :(得分:0)

您应该利用Restlet API而不是手动标头定义。 Restlet为您完成工作。在该工具的最新版本中,不再允许这样做。

关于内容类型,有两种方法:

  • 通过使用表示本身并设置媒体类型来明确表示。
  • 通过利用带注释的界面和Restlet的转换功能来隐含一个。这允许使用bean来表示表示而不是原始表示(类Representation及其子类)。在这种情况下,converterService会根据您的需要选择合适的metdia类型。

关于内容协商(CONNEG,即标题Accept),我们可以直接在您使用的方法中指定它:

// Raw representation
ClientResource cr = (...)
Representation repr = cr.get(MediaType.APPLICATION_JSON);

// Beans
ClientResource cr = (...)
cr.accept(MediaType.APPLICATION_JSON);
MyAnnotatedInterface resource = cr.wrap(MyAnnotatedInterface.class);
MyBean bean = resource.getBean();

// MyAnnotatedInterface
public class MyAnnotatedInterface {
    @Get
    MyBean getBean();
}

希望它可以帮到你, 亨利