我有简单的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
我很感激任何建议,链接。 提前谢谢!
答案 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();
}