2012-05-21 5 views
6

Я хотел бы иметь метод, как это для REST интерфейс ресурсаDropwizard/Джерси: Аутентификация и параметр JSON

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

Однако это невозможно, так как я получаю сообщение об ошибке, как: "SEVERE: Отсутствует зависимость для метода public void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food) при параметре с индексом 0 SEVERE: Отсутствует зависимость для метода public void com.restaurant.FoodResource .add (com.restaurant.User, com.restaurant.Food) при параметре по индексу 1 SEVERE: Meth od, public void com.restaurant.FoodResource.add (com.restaurant.User, com.restaurant.Food), аннотированный POST ресурса, класс com.restaurant.FoodResource, не признан действительным методом ресурсов.

Я обнаружил, что это не возможно иметь два параметра не аннотированный с некоторыми примечаниями в соответствии со спецификациями (3.3.2.1 Entity Параметры) http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html

Какие варианты существуют еще сделать что-то вроде этого? Те, которые приходят мне на ум, - это объект, который инкапсулирует пользователя и пищу, но это не похоже на приятное решение для меня.

Есть ли еще более элегантный способ сделать что-то подобное? Могу ли я отправить представление JSON Food как @PathParam?

+0

Странно, я сделал это, и работал: 'общественного недействительный modifyUser (@ Auth User authUser, @Valid User user) '. Мне нужно было опубликовать пользователя, поэтому я разделил authUser и отправленного пользователя. –

ответ

0

Раздел 3.3.2.1 несмотря на это, я не видел ошибки, как вы описать методы, такие как:

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

Так обходной путь может быть, чтобы добавить неиспользуемый @QueryParam или @Context параметр.

+1

Это обходной путь, который не нужен. Вышеупомянутый раздел относится только к аннотации из списка в разделе 3.2. Поскольку @Valid не является одним из перечисленных, его обрабатывают так, как будто он не имеет аннотации. –

3

У меня была та же проблема. На самом деле это произошло из-за отсутствия провайдера в моей тестовой конфигурации.

В своем тестовом модуле ресурса в методе setUpResources() используйте метод addProvider() для установки поставщика проверки подлинности.

Например:

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

Попробуйте поменять параметры ваших методов, от

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

в

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

 Смежные вопросы

  • Нет связанных вопросов^_^