我希望能够根据GET请求标头中的Accept
类型调用某个方法。目前,我的资源类中有以下内容:
import org.restlet.resource.Get;
@Get("json")
public Representation getJson(Variant variant) throws Exception{
return new StringRepresentation("json");
}
@Get("xml")
public Representation getXml(Variant variant) throws Exception {
return new StringRepresentation("xml");
}
@Get("x-octet-stream")
public Representation getFile(Variant variant) throws Exception {
return new StringRepresentation("octet-stream");
}
我可以使用http GET成功调用方法getJson()
和getXml()
,Accept
标题分别设置为application/json
和application/xml
。当我使用Accept
标题application/x-octet-stream
发出GET时,将调用getJSon()
方法,而不是使用x-octet-stream
注释的方法。你知道为什么吗?和/或我如何调用getFile()
方法?
休息只允许您使用json
和xml
作为方法入口点吗?是否有已识别的类型列表?我查看了网站,但没有任何类型的列表。感谢
答案 0 :(得分:1)
我相信@Get
注释使用'文件扩展名'在应用程序的MetadataService
对象中查找方法。有关默认支持的“文件扩展名”列表,请参阅此类的JavaDoc(addCommonExtensions()
)。
作为默认捕获所有媒体类型,application / octet-stream及其压缩版本都没有默认映射。但是,您也可以根据需要添加任意数量的自定义映射和MediaType
实例。我通常会在应用程序设置中执行此操作,例如:
public Application(final Context context)
{
super(context);
getMetadataService().addExtension("html", MediaType.TEXT_HTML, true);
}
完整性:如果您尝试从Disc下载预生成的文件,您可能也有兴趣查看使用Directory类。