6

リソースのRESTインターフェースにこのようなメソッドが欲しいのですが

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

ただし、次のようなエラーが発生するため、これは不可能です。「重大:インデックス0のパラメーターでメソッドpublic void com.restaurant.FoodResource.add(com.restaurant.User、com.restaurant.Food)の依存関係がありません重大:欠落していますインデックス1のパラメータでのメソッドpublicvoidcom.restaurant.FoodResource.add(com.restaurant.User、com.restaurant.Food)の依存関係重大:メソッド、public void com.restaurant.FoodResource.add(com.restaurant.User、リソースのPOSTで注釈が付けられたcom.restaurant.Food)、クラスcom.restaurant.FoodResourceは、有効なリソースメソッドとして認識されません。

仕様(3.3.2.1エンティティパラメータ) http://jsr311.java.net/nonav/releases/1.1/spec/spec3.htmlに従って、特定の注釈で注釈が付けられていない2つのパラメータを持つことはできないことがわかりました。

このようなことをまだ行うためにどのようなオプションがありますか?私の頭に浮かぶのは、ユーザーと食べ物をカプセル化したオブジェクトですが、それは私にとって良い解決策のようには思えません。

このようなことをするための他のよりエレガントな方法はありますか?JSON Food表現を@PathParamとして送信できますか?

4

3 に答える 3

3

私は同じ問題に直面しました。実際、これは私のテスト構成でプロバイダーが見つからなかったことが原因でした。

setUpResources() メソッドのリソース ユニット テストで、メソッド addProvider() を使用して認証プロバイダーを設定します。

例えば:

addProvider(new BasicAuthProvider(<Authenticator>, <CacheBuilderSpec>));
于 2013-03-14T16:43:05.187 に答える
0

メソッドのパラメーターを交換してみてください。

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

public void add(@Valid Food food, @Auth User user)
于 2013-07-28T19:45:47.513 に答える
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);

そのため、回避策として、未使用の@QueryParamor@Contextパラメータを追加することが考えられます。

于 2012-06-01T20:39:41.673 に答える