1

我希望能够根据AcceptGET 请求标头中的类型调用某个方法。目前,我的资源类中有以下内容:

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");
}

我可以成功调用这些方法getJson()getXml()使用一个http GET,并将Accept标头分别设置为application/jsonand application/xml。当我发出Accept标头为的 GET 时application/x-octet-stream,将调用该getJSon()方法,而不是用 . 注释的方法x-octet-stream。你知道为什么吗?和/或我如何调用该getFile()方法?

Rest 是否只允许您使用jsonandxml方法入口点?是否有公认类型的列表?我已经查看了该网站,但没有任何该类型的列表。谢谢

4

1 回答 1

1

我相信注释会使用“文件扩展名”@Get在您的应用程序对象中查找方法。有关默认支持的“文件扩展名”列表, MetadataService请参见此类 ( ) 的 JavaDoc 。addCommonExtensions()

作为默认捕获所有媒体类型,application/octet-stream 及其压缩版本都没有默认映射。但是,您也可以根据需要添加任意数量的自定义映射和MediaType实例。我通常会在我的应用程序设置中执行此操作,例如:

public Application(final Context context)
{
    super(context);

    getMetadataService().addExtension("html", MediaType.TEXT_HTML, true);
}

为了完整性:如果您尝试从光盘下载预生成的文件,您可能也有兴趣查看使用 Directory 类。

于 2013-08-12T14:16:04.983 回答