我想在 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));
答案 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为您完成工作。在该工具的最新版本中,不再允许这样做。
关于内容类型,有两种方法:
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();
}
希望它可以帮到你, 亨利