Dropwizard/Jersey:身份验证和JSON参数

Han*_*nsi 6 authentication parameters json jersey dropwizard

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

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

但是,这是不可能的,因为我得到一个错误,如:"严重:缺少方法public void com.restaurant.FoodResource.add(com.restaurant.User,com.restaurant.Food)的依赖关系在索引0处的参数:SEVERE:Missing方法public void com.restaurant.FoodResource.add(com.restaurant.User,com.restaurant.Food)的索引在索引1的参数SEVERE:Method,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

还有什么选择可以做这样的事情?我想到的是一个封装User和Food的对象,但这似乎不是一个很好的解决方案.

有没有其他更优雅的方式来做这样的事情?我可以将JSON Food表示作为@PathParam发送吗?

小智 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);
Run Code Online (Sandbox Code Playgroud)

因此,解决方法可能是添加未使用的@QueryParam@Context参数。