从JAX-RS服务获取资源时出错

时间:2012-12-12 17:07:26

标签: java tomcat jax-rs

我有简单的JAX-RS服务器应用程序:

@GET
@Path("/getImage/{key}")
@Produces("image/jpeg")
public final BufferedImage getImageResource(@PathParam("key") String key) {
  final File file = new File(key); // the key will be "cat.jpeg" e.t.c.

  final BufferedImage image = ImageIO.read(new FileInputStream(file));

  return image;
}

将war文件部署到tomcat服务器(6.0)之后,我会做下一步:

http://localhost:8080/resource-service/getImage/cat.png

问题:

1)在新文件(密钥)上,它将转到tomcat根目录。我希望在类的项目目录中有类似默认根文件夹的资源。

2)不允许返回BufferedImage,据我所知,我收到500错误消息:

HTTP Status 500 - Could not find MessageBodyWriter for response object of type: java.awt.image.BufferedImage of media type: image/jpeg

我很感激任何建议,链接。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

为了访问WAR包中的文件,您应该使用ServletContext。首先,将它作为变量首先注入到您的类中:

@Context
ServletContext context;

然后使用以下方法查找文件:

final File file = new File(this.context.getRealPath(key));

无法返回BufferedImage(并自动将其映射到image/jpeg),但在您的示例中,您无需执行此操作。只需返回JAX-RS响应:

@GET
@Path("/getImage/{key}")
@Produces("image/jpeg")
public final Response get(@PathParam("key") String key) {
    return Response.ok()
        .entity(this.context.getResourceAsStream(key))
        .type("image/jpeg")
        .build();
}

类似的问题:Dynamically create image from JAX-RS servlet