Ich habe das gleiche Problem und versuchte Zero3-Lösung (Required @QueryParam in JAX-RS (and what to do in their absence)), aber in meinem Fall parameter.isAnnotationPresent(Required.class)
immer false
zurück.Pflicht @QueryParam in JAX-RS @Required Annotation nicht in ContainerRequestFilter funktioniert
Das ist mein Required Anmerkung:
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Required {
// This is just a marker annotation, so nothing in here.
}
Ich versuchte es auch mit einem BeanParam
Annotation und modifiziert, um die Filter dementsprechend aber dasselbe Ergebnis - immer null
für isAnnotionPresen
bekommen.
Ich benutze WildFly 9 (RESTeasy), die den Anforderungsfilter automatisch registriert.
Meine REST-Ressource wie folgt aussieht:
@GET
@Path("/{type}/{id}")
public Response getAllByTypeAndId(@Required @BeanParam RequiredQueryParams requiredQueryParams,
@Required @QueryParam("mandant") String mandant,
@PathParam("type") String type,
@PathParam("id") Long id) {
...doSomething...
}
Ausführen des Debugger zeigt für parameter.declaredAnnotations zwei Einträge in der HashMap für BeanParam
:
0 interface my.annotations.Required -> @my.annotations.Required()
1 interface javax.ws.rs.BeanParam -> @javax.ws.rs.BeanParam()
und für QueryParam
:
0 interface my.annotations.Required -> @my.annotations.Required()
1 interface javax.ws.rs.QueryParam -> @javax.ws.rs.QueryParam(value=mandant)
Alle Hinweise willkommen - Danke!
Scheint wie Bean-Validierung wäre für diesen Anwendungsfall besser geeignet. Schauen Sie sich die Dokumentation zu RESTEasy (Wildfly's jax-rs) an. Es gibt einen Abschnitt zur Bean-Validierung –
Das wäre die letzte Option, weil ich an einer Multi-Tenant-Anwendung arbeite, in der wir viele REST-Services haben und jeder von ihnen den obligatorischen "mandant" -Parameter benötigt. Ich würde eine Filterlösung bevorzugen, die in Zero3s Lösung beschrieben ist (http://stackoverflow.com/questions/13968261/required-queryparam-in-axs-rs-and-what-to-do-in-the-absence/38639372 # 38639372) – raho