2012-09-06 57 views
1

有什么办法可以选择最好的Accept mimetype进行图像处理吗?JAX-RS如何选择图像mimetype?

我有一个资源看起来像这样。

@GET 
@Produces({"image/jpeg", "image/png"}) 
public Response readResizedImage(
    @Context Request request, 
    @Context HttpHeaders httpHeaders, 
    @QueryParam("width") final int width, 
    @QueryParam("height") final int height) { 

    final List<Variant> variants = Variant.mediaTypes(
     new MediaType("image", "jpeg"), new MediaType("image", "png")).build(); 

    // Why on earth variants is empty? 
    if (!variants.isEmpty()) { 
     final Variant variant = request.selectVariant(variants); 
     LOGGER.log(Level.INFO, "{0}", variant.getMediaType().toString()); 
    } 

    final List<MediaType> acceptableMediaTypes = 
     httpHeaders.getAcceptableMediaTypes(); 
    for (MediaType acceptableMediaType : acceptableMediaTypes) { 
     LOGGER.log(Level.INFO, "acceptableMediaType:{0}/{1}", 
        new Object[]{acceptableMediaType.getType(), 
           acceptableMediaType.getSubtype()}); 
    } 

    return null; 
} 

我用下面的命令试过这个资源。

$ curl -v -H "Accept: */*" \ 
-H "Accept: image/*;q=0.2" \ 
-H "Accept: image/jpeg;q=0.5" \ 
-H "Accept: image/png;q=1.0" \ 
http://............. 

和服务器打印

acceptableMediaType:image/png 
acceptableMediaType:*/* 
acceptableMediaType:image/jpeg 
acceptableMediaType:image/* 

问题:

如何选择正确的(不是通配符)MIME类型?

我必须有一个用于处理图像字节重新调整大小。

回答

1

如果你把这个留给泽西岛最简单 - 即有2种方法,一种产生图像/ PNG,另一种产生图像/ JPEG。泽西将根据传入请求的接受头中各个媒体类型的质量参数调用正确的参数。

+0

你能给出一个链接来解释这个选择是如何工作的吗? – kommradHomer

+0

请参阅JAX-RS规范(http://jcp.org/aboutJava/communityprocess/edr/jsr339/index3.html)第3.8节 –