Jax-rs http header 范围
Jax-rs http header range
我想在 Jax-rs 应用程序中使用 http header 'Range',我可以为此定义一个单元吗?例如,记录数。
我想实现的是将响应中返回的记录数限制为'Range'
的最大值
为了解析更复杂的参数,您可以实现 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);
}
}
您可以这样使用 class:
public Response get(@HeaderParam("Range") RangeHeader range) {
//
}
注意:这只是一个快速+肮脏的实现,不处理特殊值或错误。
我想在 Jax-rs 应用程序中使用 http header 'Range',我可以为此定义一个单元吗?例如,记录数。
我想实现的是将响应中返回的记录数限制为'Range'
的最大值为了解析更复杂的参数,您可以实现 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);
}
}
您可以这样使用 class:
public Response get(@HeaderParam("Range") RangeHeader range) {
//
}
注意:这只是一个快速+肮脏的实现,不处理特殊值或错误。