2015-05-30 62 views
2

我想在Jax-rs應用程序中使用http標頭'Range',我可以爲此定義一個單元嗎?例如記錄的數量。Jax-rs http標頭範圍

我想實現是限制在響應返回的「範圍」

回答

3

最大值記錄數量爲了解析更復雜的參數可以實現一個ParamConverter

@Provider 
public class RangeHeaderConverter implements ParamConverter<RangeHeader> { 

    @Override 
    public RangeHeader fromString(String value) { 
     return RangeHeader.fromValue(value); 
    } 

    @Override 
    public String toString(RangeHeader value) { 
     return value.toString(); 
    } 

} 

您RangeHeader的實現可能是這樣的:

public class RangeHeader { 

    public static enum Unit { 
     BYTES; 
    } 

    private Unit unit; 

    private long from; 

    private long to; 

    public RangeHeader(Unit unit, long from, long to) { 
     this.unit = unit; 
     this.from = from; 
     this.to = to; 
    } 

    public Unit getUnit() { 
     return unit; 
    } 

    public long getFrom() { 
     return from; 
    } 

    public long getTo() { 
     return to; 
    } 

    public static RangeHeader fromValue(String range) { 
     if (range == null) { 
      return null; 
     } 
     String[] tokens = range.replace("Range: ", "").split("="); 
     Unit unit = Unit.valueOf(tokens[0].toUpperCase()); 
     String[] fromTo = tokens[1].split("-"); 
     long from = Long.valueOf(fromTo[0]); 
     long to = Long.valueOf(fromTo[1]); 
     return new RangeHeader(unit, from, to); 
    } 

    public String toString() { 
     return String.format("Range: %s=%d-%d", unit.name().toLowerCase(), from, to); 
    } 

} 

你可以使用這個類是這樣的:

public Response get(@HeaderParam("Range") RangeHeader range) { 
    // 
} 

注意:這只是一個快速+髒的實現,並不處理特殊值或錯誤。