【问题标题】:How to use Rest Get Annotation for application/x-octet-stream Accept header如何为 application/x-octet-stream Accept 标头使用 Rest Get Annotation
【发布时间】:2013-08-12 11:47:27
【问题描述】:

我希望能够根据 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() 方法?

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

【问题讨论】:

    标签: java http rest get restlet


    【解决方案1】:

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

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

    public Application(final Context context)
    {
        super(context);
    
        getMetadataService().addExtension("html", MediaType.TEXT_HTML, true);
    }
    

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

    【讨论】:

    • 是的,这行得通。你怎么知道这是要采取的方法?我不确定我是如何通过自己的研究发现的。
    • 老实说,我不记得自 1.1.x 版以来我一直在使用 restlet,我认为从那时起,这可能已经随着库的发展而有所发展。我已经有一段时间没有仔细查看该领域的文档了。文档的发展速度可能跟不上。
    • javadocs: Restlet MetadataService * 将默认语言设置为 Language.ENGLISH_US,默认编码为 Encoding.IDENTITY(无编码),默认媒体类型为 MediaType.APPLICATION_OCTET_STREAM。它还调用 addCommonExtensions() 方法。
    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    相关资源
    最近更新 更多