2012-05-21 15 views
6

Me gustaría tener un método como este para la interfaz REST de un recursoDropwizard/Jersey: autenticación y el parámetro JSON

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

Sin embargo, esto no es posible, ya que me da un error como: "SEVERE: Falta la dependencia del método public void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food) en el parámetro en el índice 0 SEVERE: Falta la dependencia del método public void com.restaurant.FoodResource .add (com.restaurant.User, com.restaurant.Food) en el parámetro en el índice 1 SEVERE: Meth od, public void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food), anotado con POST del recurso, clase com.restaurant.FoodResource, no se reconoce como método de recursos válido.

He encontrado que no es posible tener dos parámetros no anotados con ciertas anotaciones de acuerdo con las especificaciones (3.3.2.1) Entidad Parámetros http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html

qué opciones existen para hacer aún algo como esto? Los que me vienen a la mente es un objeto que encapsula al usuario y la comida, pero eso no parece ser una buena solución para mí.

¿Hay alguna otra forma más elegante de hacer algo como esto? ¿Puedo enviar la representación de JSON Food como @PathParam?

+0

extraño, lo hice y funcionó: 'modifyUser public void (@ Auth User authUser, @Valid User user) '. Necesitaba publicar el usuario, así que separé el authUser y el usuario publicado. –

Respuesta

0

Sección 3.3.2.1 no obstante, que no he visto errores como se describen con métodos tales como los siguientes:

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); 

Así que una solución podría consistir en añadir un parámetro no utilizado o @QueryParam@Context.

+1

Esta es una solución alternativa que no es necesaria. La sección antes mencionada solo se refiere a las anotaciones de la lista en la sección 3.2. Como @Valid no es uno de los enumerados, se trata como si no tuviera ninguna anotación. –

3

Tuve el mismo problema. De hecho, esto se debió a un proveedor faltante en mi configuración de prueba.

En su prueba de unidad de recursos en el método setUpResources(), use el método addProvider() para configurar su proveedor de autenticación.

Por ejemplo:

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

intentar cambiar los parámetros de sus métodos, desde

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

a

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