当jersey无法映射查询参数时,404失败,为什么会这样?

时间:2012-06-28 10:48:12

标签: rest jersey

我不是任何球衣大师,但我读到球衣不能解决基于查询参数的java方法,但有时看起来确实如此,这是我的例子。

这是服务器代码:

@GET
@Path("/services")
public String getAll(
        @QueryParam("limit") Integer limit,
        @QueryParam("offset") Integer offset){
        return "1 2 3";
}

这是客户端代码:

ClientResponse response = webResource
        .path("services")
        .queryParam("limit", "ab")
        .get(ClientResponse.class);
logger.info(response.toString());
assertEquals(response.getStatus(), 200);

看起来泽西不喜欢“ab”,并且无法映射查询参数,因此它返回404,但是如果limit =“1”,我可以使用正确的方法。

在这种情况下,球衣是否有权返回404?我知道我可以使用String而不是Integer来扩展界面以覆盖任何可行的sintax错误的所有处理。我可以配置球衣代表我这样做吗? / p>

我正在使用服务器:grizzly / 1.9.18,jersey 1.11

谢谢!

1 个答案:

答案 0 :(得分:3)

目前在泽西岛是不可能的。也许我们可以提出一个功能,使这个更友好。你可以附加到参数的@ErrorParam注释之类的东西怎么样。如果存在这样的参数并且某些QueryParam转换失败,则将使用默认值填充查询参数,并且将错误的参数的实际字符串值添加到使用@ErrorParam注释的参数中传递的名称 - 值映射? / p>

@GET
@Path("/services")
public String getAll(
        @QueryParam("limit") Integer limit,
        @QueryParam("offset") Integer offset,
        @ErrorParam MultivaluedMap<String, String> typeErrors) {

    if (!typeErrors.isEmpty()) {
        // do something
    }

    return "1 2 3";
}

我在这里提交了一份RFE:http://java.net/jira/browse/JERSEY-1263

如果您有意见,请发表评论。