LAC*_*LAC 6 rest param jax-rs converter jersey-2.0
我写了一个ParamConverterProvider和一个ParamConverter,以便让JAX-RS(Jersey)在HeaderParam中实例化一个枚举.转换器看起来像这样
@Provider
public class MyEnumParamConverterProvider implements ParamConverterProvider {
public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
if (rawType.equals(MyEnum.class)) {
return (ParamConverter<T>) new MyEnumParamConverter();
}
return null;
}
private static class MyEnumParamConverter implements ParamConverter<MyEnum> {
@Override
public MyEnum fromString(String enum) {
return MyEnum.of(enum);
}
@Override
public String toString(MyEnum enum) {
return enum.toString();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当没有发送Header时没有调用fromString方法,因为在方法类SingleValueExtractor中的Jersey代码org.glassfish.jersey.server.internal.inject.SingleValueExtractor.extract(MultivaluedMap<String, String>)上,第82行有一个代码检查参数值是否为null,如果它是!= null则fromString方法叫做.
public T extract(MultivaluedMap<String, String> parameters) {
String v = parameters.getFirst(getName());
if (v != null) {
try {
return fromString(v);
} catch (WebApplicationException ex) {
throw ex;
} catch (ProcessingException ex) {
throw ex;
} catch (Exception ex) {
throw new ExtractorException(ex);
}
} else {
return defaultValue();
}
}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是绕过这个部分,让我的fromString甚至在空值上被调用,因为那里有一些特殊的异常处理.
对此有什么办法吗?我不想像@NotNull那样使用bean验证,以便我在一个地方处理所有事情.
如果你可以改变泽西岛版本,我会这样做.似乎这种行为发生在2.13和之前.2.14及更高版本此问题已得到修复,其中实施已更改
@Override
public T extract(MultivaluedMap<String, String> parameters) {
String v = parameters.getFirst(getName());
try {
return fromString((v == null && isDefaultValueRegistered())
? getDefaultValueString() : v);
} catch (WebApplicationException ex) {
throw ex;
} catch (ProcessingException ex) {
throw ex;
} catch (IllegalArgumentException ex) {
return defaultValue();
} catch (Exception ex) {
throw new ExtractorException(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
如果先前,null将导致defaultValue()(这只是一个null结果),现在所有值都传递给fromString,最终调用你的 fromString
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |