如何对application / x-octet-stream Accept头使用Rest Get Annotation

时间:2013-08-12 11:47:27

标签: java http rest get restlet

我希望能够根据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/jsonapplication/xml。当我使用Accept标题application/x-octet-stream发出GET时,将调用getJSon()方法,而不是使用x-octet-stream注释的方法。你知道为什么吗?和/或我如何调用getFile()方法?

休息只允许您使用jsonxml作为方法入口点吗?是否有已识别的类型列表?我查看了网站,但没有任何类型的列表。感谢

1 个答案:

答案 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类。