Ich habe einen ParamConverterProvider und einen ParamConverter geschrieben, damit JAX-RS (Jersey) eine Enumeration in HeaderParam instanziiert. Der Konverter sieht wie folgt ausfromString-Methode von ParamConverter wird nicht aufgerufen Nullwerte in JAX-RS
@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();
}
}
}
jedoch die vonString Methode wird nicht aufgerufen, wenn der Kopf nicht, weil auf Jersey Code gesendet wird, in der Klasse SingleValueExtractor in Verfahren org.glassfish.jersey.server.internal.inject.SingleValueExtractor.extract(MultivaluedMap<String, String>)
gibt es einen Code auf der Leitung 82, das überprüft, ob der Parameterwert null ist oder nicht und wenn es! = null ist, wird die fromString-Methode aufgerufen.
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();
}
}
Was ich eigentlich möchte diesen Teil umgehen und ließ meine vonString dort Handhabung, weil einige spezielle Ausnahme auch auf NULL-Werte aufgerufen.
Gibt es einen Weg dazu. Ich möchte keine Bean-Validierung wie @NotNull verwenden, damit ich alles an einem Ort behandle.
Danke für die Lösung. Problem gelöst. Die neuere Jersey-Implementierung macht mehr Sinn. – LAC