2012-05-21 79 views
6

我想有這樣的方法對資源Dropwizard /新澤西州:身份驗證和JSON參數

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

不過的REST接口,這是不可能的,因爲我得到這樣一個錯誤: 「SEVERE:缺少方法的依賴關係public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food)at index 0 SEVERE:缺少方法的依賴關係public void com.restaurant.FoodResource .add(com.restaurant.User, com.restaurant.Food)at index 1 SEVERE:Meth od,public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food),用POST註釋的資源類com.restaurant.FoodResource不被識別爲有效的資源方法。

我發現這是不可能有兩個參數不按照說明書(3.3.2.1實體參數)有一定的註解,http://jsr311.java.net/nonav/releases/1.1/spec/spec3.html

有哪些辦法還做這樣的事情?我想到的是封裝用戶和食物的對象,但這對我來說似乎不是一個很好的解決方案。

是否有任何其他更優雅的方式來做這樣的事情?我可以發送JSON食物表示作爲@PathParam嗎?像你

+0

奇怪了,我做了這一點,並努力:'公共無效modifyUser(@身份驗證用戶身份驗證用戶,@有效用戶用戶)'。我需要發佈用戶,以便將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)