Bei Verwendung von Enums als QueryParam
Werden ENUMs als @QueryParams
verwendet, müssen die Parameter exakt so heißen, wie die ENUM-Werte. Es gibt keine
Unterscheidung in Groß-, Kleinbuchstaben und auch Bindestriche sind nicht zulässig. Um diese Werte dennoch als Parameter
zu ermöglichen, kann man einen ParamConverter
verwenden.
import javax.ws.rs.ext.ParamConverter;
public class EnumwertConverter implements ParamConverter<Enumwert> {
@Override
public Enumwert fromString(final String value) {
// Hier der abweichende Code
return Enumwert.valueOf(value);
}
@Override
public String toString(final Enumwert value) {
return value.toString();
}
}
Um den Konverter zu verwenden, muss er publiziert werden. Dies geschieht mit einem ParamConverterProvider
.
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
@Provider
public class EnumwertConverterProvider implements ParamConverterProvider {
@Override
public <T> ParamConverter<T> getConverter(final Class<T> rawType, final Type genericType, final Annotation[] annotations) {
if (rawType.equals(Enumwert.class)) {
return (ParamConverter<T>)new EnumwertConverter();
}
ereturn null;
}
}
Das ist schon die ganze Magic und die Parameter, die mit @QueryParam
annotiert sind, werden konvertiert.