1

我有简单的 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

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

4

1 回答 1

1

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

@Context
ServletContext context;

然后使用以下命令查找文件:

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

不可能返回 a 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();
}

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

于 2012-12-12T20:58:43.553 回答