创建 JAX-RS 提供程序以从 InputStream 创建 Java 映像
我正在尝试创建一个 image/jpeg jax-rs 提供程序类,为我的基于休息后的 Web 服务创建图像。我无法制定请求来测试以下内容,测试这个的最简单方法是什么?
@POST
@Path("/upload")
@Consumes("image/jpeg")
public Response createImage(Image image)
{
image.toString(); //temp code here just to see if service gets hit
return null;
}
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.imageio.ImageIO;
import javax.ws.rs.Consumes;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import org.springframework.stereotype.Component;
@Provider
@Consumes("image/jpeg")
@Component("ImageProvider") //spring way to register resource
class ImageProvider implements MessageBodyReader<Image> {
public Image readFrom(Class<Image> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
Image originalImage = ImageIO.read(entityStream);
return originalImage;
}
public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
I'm trying to create an image/jpeg jax-rs provider class that creates an Image for my post rest based web service. I'm unable to formulate the request in order to test the below, what is easiest way to test this?
@POST
@Path("/upload")
@Consumes("image/jpeg")
public Response createImage(Image image)
{
image.toString(); //temp code here just to see if service gets hit
return null;
}
import java.awt.Image;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.imageio.ImageIO;
import javax.ws.rs.Consumes;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.Provider;
import org.springframework.stereotype.Component;
@Provider
@Consumes("image/jpeg")
@Component("ImageProvider") //spring way to register resource
class ImageProvider implements MessageBodyReader<Image> {
public Image readFrom(Class<Image> type,
Type genericType,
Annotation[] annotations,
MediaType mediaType,
MultivaluedMap<String, String> httpHeaders,
InputStream entityStream) throws IOException,
WebApplicationException {
Image originalImage = ImageIO.read(entityStream);
return originalImage;
}
public boolean isReadable(Class<?> arg0, Type arg1, Annotation[] arg2, MediaType arg3) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您的提供程序也实现了 MessageBodyWriter,您可以使用客户端库(例如 Wink 客户端)使用相同的提供程序发送图像:
Wink 的示例代码:
顺便说一句,您的提供程序中有一个错误:您必须实现
isReadable
方法,因此它将返回true
正确的媒体类型和类别。If your provider implements also MessageBodyWriter, you can use a client library (e.g. Wink Client) and use the same provider to sennd the image:
Sample code with Wink:
Btw, there is a bug in your provider: you MUST implement
isReadable
method, so it will returntrue
for the correct media type and class.