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) 的依赖项严重:缺失方法 public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food) 在索引 1 处的参数的依赖严重:方法,公共 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 Food 表示作为@PathParam 发送吗?

4

3 回答 3

3

我遇到了同样的问题。事实上,这是由于我的测试配置中缺少提供者。

在 setUpResources() 方法中的资源单元测试中,使用方法 addProvider() 设置您的身份验证提供程序。

例如:

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

Section 3.3.2.1 notwithstanding, I haven't seen errors like you describe with methods such as the following:

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 a workaround might be to add an unused @QueryParam or @Context parameter.

于 2012-06-01T20:39:41.673 回答
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 回答