[英]Create JAX-RS provider to create a Java Image from InputStream
I'm trying to create an image/jpeg jax-rs provider class that creates an Image for my post rest based web service.我正在尝试创建一个图像/jpeg jax-rs 提供程序 class ,它为我的基于 rest 的 web 服务创建一个图像。 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.");
}
}
If your provider implements also MessageBodyWriter, you can use a client library (eg Wink Client ) and use the same provider to sennd the image:如果您的提供程序也实现了 MessageBodyWriter,您可以使用客户端库(例如Wink Client )并使用相同的提供程序来发送图像:
Sample code with Wink: Wink 示例代码:
ClientConfig config = new ClientConfig();
Application application = // create application that contains ImageProvider
config.applications(application);
RestClient restClient = new RestClient(config);
URI uri = // uri to server
Image image = // create image
restClient.resource(uri).contentType("image/jpeg").post(image);
Btw, there is a bug in your provider: you MUST implement isReadable
method, so it will return true
for the correct media type and class.顺便说一句,您的提供程序中有一个错误:您必须实现
isReadable
方法,因此它将为正确的媒体类型和 class 返回true
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.