我不明白为什么会发生这种情况:当我在名为" process"的带注释的java类中明确声明输入的文件名时,一切都很完美:
@GET
public static void process() throws IOException {
File file = new File("a.pdf");
FileUtils.writeStringToFile(new File("a.pdf" + ".exported"), menu.parseToString(file));
}
但是,当我尝试将文件名作为参数传递时,并通过运行配置配置eclipse以提供适当的参数(" a.pdf"的路径):
@GET
public static void process(String[] args) throws IOException {
File file = new File(args[0]);
FileUtils.writeStringToFile(new File(args[0] + ".exported"), menu.parseToString(file));
}
当我调用该服务时,它失败并显示错误:
Oct 09, 2014 9:44:55 AM org.apache.cxf.jaxrs.utils.JAXRSUtils readFromMessageBody
WARNING: No message body reader has been found for request class String[], ContentType :
application/octet-stream.
我是jax rs的新手。我是否会错过任何注释?非常感谢你......
答案 0 :(得分:2)
此
public static void process("a.pdf") throws IOException {
// ...
}
是无效的Java语法。每个IDE和javac
都会抱怨它。 Eclipse说:
令牌上的语法错误"" a.pdf"",删除此令牌
application/octet-stream
作为正文您似乎尝试使用GET
发出Content-Type: application/octet-stream
请求(您以某种方式点击了这个文件')。这有两个问题:
GET
请求通常没有正文,只有标题。application/octet-stream
的字节体无法映射到String[]
,因为JAX-RS无法知道如何解释字节。看起来您希望使用文件名作为请求参数发出GET
请求(与不同)文件在请求的正文中)。你可以这样做:
GET http://example.com/service?filename=foo.pdf
然后可以使用以下JAX-RS来为此请求提供服务:
@GET
public Response service(@QueryParam("filename") String filename) {
// use filename to open a File and do something with it
}
请注意使用@QueryParam
,service
允许filename=foo.pdf
从请求网址中提取{{1}}。