Java 如何在restlet中使用Jersey进行下载?

Java 如何在restlet中使用Jersey进行下载?,java,jersey,Java,Jersey,我正在玩Jersey,想知道如何实现“下载”功能。例如,假设我在/files/下有一些资源,我希望通过GET来“下载”这些资源,我应该如何做到这一点?我已经知道GET、PUT、POST、DELETE的正确注释和实现,但我不太确定在这种情况下应该如何处理二进制数据。谁能给我指出正确的方向,或者给我一个简单的实现?我已经看了jersey-samples-1.4,但似乎找不到我要找的东西 非常感谢 您应该使用@products注释来指定文件的媒体类型(pdf、zip等)。可以找到此注释的Java规范

我正在玩Jersey,想知道如何实现“下载”功能。例如,假设我在
/files/
下有一些资源,我希望通过
GET
来“下载”这些资源,我应该如何做到这一点?我已经知道
GET
PUT
POST
DELETE
的正确注释和实现,但我不太确定在这种情况下应该如何处理二进制数据。谁能给我指出正确的方向,或者给我一个简单的实现?我已经看了
jersey-samples-1.4
,但似乎找不到我要找的东西


非常感谢

您应该使用@products注释来指定文件的媒体类型(pdf、zip等)。可以找到此注释的Java规范

您的服务器应该返回创建的文件。例如,在core java中,您可以执行以下操作:

@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("path")
public StreamingOutput getFile() {
    return new StreamingOutput() {
        public void write(OutputStream out) throws IOException, WebApplicationException {
            try {
                 FileInputStream in = new FileInputStream(my_file);
                 byte[] buffer = new byte[4096];
                 int length;
                 while ((length = in.read(buffer)) > 0){
                    out.write(buffer, 0, length);
                 }
                 in.close();
            } catch (Exception e) {
                throw new WebApplicationException(e);
            }
        }
    };
}

谢谢如果我事先没有文件类型,但知道它是二进制文件,那该怎么办?我假设
@products
在方法上?(对不起,你介意用一种带有适当注释的方法来说明它吗?我知道如何处理流媒体部分…)好的,我编辑了我的文章。现在,您有了方法示例。我认为如果你的文件是二进制的,你应该使用APPLICATION_OCTET_STREAM。在本例中,我使用了post,我正在处理您提供的代码,我似乎得到了一个
返回的响应状态为405 Method Not Allowed
。有什么想法吗。。。?在客户端,我有
WebResource-WebResource=client.resource(url);webResource.accept(MediaType.APPLICATION\u OCTET\u STREAM).get(String.class)
您必须指定实现服务的HTTP方法。例如,我使用@GET annotation指定对于特定的“路径”和GET HTTP请求,将执行此方法(服务)。结果我在@path中输入了一个错误,这就把一切都搞砸了。否则代码就没问题了。无论如何谢谢你!jersey和restlet不是RESTAPI的不同实现吗?如果是这样的话,我不明白你为什么要同时使用这两者。也许你的意思是
REST
,而不是
Restlet