2012-05-21 9 views
6

Ich mag würde eine Methode, wie dies für die REST-Schnittstelle einer Ressource habenDropwizard/Jersey: Authentifizierung und JSON Parameter

@POST 
@Consumes(MediaType.APPLICATION_JSON) 
public void add(@Auth User user, @Valid Food food) { 
    //consume 
} 

Dies ist jedoch nicht möglich, da ich einen Fehler wie: "SEVERE: Fehlende Abhängigkeit für Methode public void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food) bei Parameter bei Index 0 SEVERE: Fehlende Abhängigkeit für Methode öffentlichen void com.restaurant.FoodResource .add (com.restaurant.User, com.restaurant.Food) bei Parameter bei Index 1 SEVERE: Meth od, öffentliches void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food), kommentiert mit POST der Ressource, Klasse com.restaurant.FoodResource, wird nicht als gültige Ressource-Methode erkannt.

fand ich, dass es nicht möglich ist, zwei Parameter, die nicht mit bestimmten Anmerkungen Anmerkungen versehen zu haben, gemäß den Spezifikationen (3.3.2.1 Entity-Parameter) http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html

Welche Möglichkeiten gibt es noch etwas tun zu? Die, die mir in den Sinn kommen, sind ein Objekt, das Benutzer und Essen kapselt, aber das scheint für mich keine nette Lösung zu sein.

Gibt es noch einen eleganteren Weg, so etwas zu tun? Kann ich die JSON Food-Repräsentation als @PathParam senden?

+0

Seltsam, tat ich dies und arbeitete: 'public void modifyUser (@ Auth User authUser, @Valid Benutzer user) '. Ich musste den Benutzer posten, also habe ich den autHUser und den geposteten Benutzer getrennt. –

Antwort

0

Abschnitt 3.3.2.1 ungeachtet, ich habe wie du nicht gesehen Fehler beschreiben mit Methoden wie den folgenden:

public Response post(
    @Auth User user, @Valid Food food, @Context UriInfo uriInfo); 

public Response post(
    @Auth User user, @Valid Food food, @QueryParam String s); 

public Response post(
    @Auth User user, @Valid Food food, BooleanParam b); 

So eine Abhilfe einen ungenutzten @QueryParam oder @Context Parameter hinzuzufügen sein könnte.

+1

Dies ist eine Problemumgehung, die nicht erforderlich ist. Der oben genannte Abschnitt bezieht sich nur auf Anmerkungen aus der Liste in Abschnitt 3.2. Da @Valid nicht zu den aufgeführten gehört, wird es so behandelt, als ob es keine Anmerkung hätte. –

3

Ich konfrontiert das gleiche Problem. In der Tat war dies aufgrund eines fehlenden Providers in meiner Testkonfiguration.

Verwenden Sie in Ihrem Ressourceneinheitstest in der setUpResources() - Methode die Methode addProvider(), um Ihren Authentifizierungsanbieter festzulegen.

Zum Beispiel:

addProvider(new BasicAuthProvider(<Authenticator>, <CacheBuilderSpec>)); 
0

Versuchen Sie, Ihre Methoden Parameter zu tauschen, von

public void add(@Auth User user, @Valid Food food) 

zu

public void add(@Valid Food food, @Auth User user) 
Verwandte Themen