Ich baue einen RESTful-Service, bei dem Endpunkte basierend auf der Ressourcendateibeschreibung generiert werden sollen. Das Registrieren von Ressourcen mit implizitem Methoden-Builder-Handler funktioniert einwandfrei, aber wenn ich versuche, den impliziten Handler durch explizite zu ersetzen, stoße ich gegen eine Wand.Custom jersey Inflector
Im folgenden Beispiel habe ich den impliziten Handler Inflector durch die explizite Implementierung von ItemInflector ersetzt. String-Ergebnis wird nach der Ausführung erwartet.
final Resource.Builder resourceBuilder = Resource.builder();
resourceBuilder.path("api/myservice/item");
final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET");
methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE)
.handledBy(new ItemInflector<ContainerRequestContext, String>(String.class));
final Resource resource = resourceBuilder.build();
registerResources(resource);
ItenInflector Umsetzung:
public class ItemInflector<DATA extends ContainerRequestContext, RESULT> implements Inflector<DATA, RESULT> {
private Class<RESULT> type;
public ItemInflector(Class<RESULT> type) {
this.type = type;
}
@Override
public RESULT apply(DATA data) {
return type.cast("Half programmatically generated endpoint");
}
}
Zur Laufzeit wird der folgende Fehler ausgelöst wird, wenn ich versuche, Endpunkt zu treffen.
Caused by: java.lang.IllegalArgumentException: Type parameter RESULT not a class or parameterized type whose raw type is a class
Könnte jemand klären, was mache ich falsch in der Inflector-Implementierung? Wie parametriere oder definiere RESULT Typ?
Würde es Ihnen etwas ausmachen, zu aktualisieren die zweiten Links, es ist kaputt. – Maxim
bereits erledigt :) –