【问题标题】:Dropwizard/Jersey: Authentication and JSON parameterDropwizard/Jersey:身份验证和 JSON 参数
【发布时间】:2012-05-21 19:55:31
【问题描述】:

我想为资源的 REST 接口提供这样的方法

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

但是,这是不可能的,因为我收到如下错误: “严重:缺少方法 public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food) 在索引 0 处的参数处 严重:缺少方法 public void com.restaurant.FoodResource.add(com.restaurant.User, com.restaurant.Food) 在索引 1 处的参数 严重:方法,公共无效 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 发送吗?

【问题讨论】:

  • 奇怪,我这样做并工作了:public void modifyUser(@Auth User authUser, @Valid User user)。我需要发布用户,所以我将 authUser 和发布的用户分开。

标签: json authentication parameters jersey dropwizard


【解决方案1】:

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

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

例如:

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

【讨论】:

    【解决方案2】:

    尽管有第 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 参数。

    【讨论】:

    • 这是一种不必要的解决方法。上述部分仅引用第 3.2 节中列表中的注释。由于@Valid 不是列出的其中之一,因此它被视为没有注释。
    【解决方案3】:

    尝试从

    交换您的方法参数
    public void add(@Auth User user, @Valid Food food)
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-10
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2015-03-22
      • 2014-11-23
      • 1970-01-01
      相关资源
      最近更新 更多