2012-09-06 22 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節 –