两个URL之间的混淆混淆

时间:2014-03-04 11:22:54

标签: java rest resteasy

我有两个不同的网址:

GET /stuff/{id} (where id is an Integer)
GET /stuff/foo?bar={someValue} (foo is not an Integer, it is a hard coded String)

调用/stuff/foo&bar=someValue时,出现以下错误:

Failed executing GET /stuff/foo&bar=someValue
...
Caused by: java.lang.NumberFormatException: For input string: "foo&bar=someValue"

代码是:

@GET
@Path("/stuff/{id}")
public Response getById(@PathParam("id") int id) {
    // code
}

@GET
@Path("/stuff/foo")
public Response foo(@QueryParam("bar") String bar) {
    // code
}

我正在使用RESTEasy,我希望尽可能保留我的网址。显然,RESTEasy只是尝试使用foo方法的getById方法。

如何在RESTEasy中完成这项工作? (如果没有关于RESTEasy限制的详细解释),“更改您的URL”不是答案。我试过(确定)在getById之前放入foo代码,但我有同样的错误(当然)。

声明的URL之间是否有任何优先级概念?

作为一个注释:我已经在另一个框架(python-flask)中实现了这种URL,它工作得很好:你必须要小心在 / stuff之前声明/ stuff / foo / {id}(在更通用的情况之前的具体情况)。


编辑:我刚犯了一个愚蠢的错误!我打电话给/stuff/foo&bar=someValue我应该打电话给/stuff/foo?bar=someValue。谢谢@Scobal指出来了!

1 个答案:

答案 0 :(得分:1)

您正在呼叫GET /stuff/foo&bar=someValue

您应该致电GET /stuff/foo?bar=someValue

RESTEasy正在尝试将foo&bar=someValue解析为{id}字段。

我不能给你一个关于RESTEasy URL优先级的答案,但你可以这样做:

@GET
@Path("/stuff/{id}")
public Response getById(@PathParam("id") String id, @QueryParam("bar") String bar) {           
    try { 
        int intId = Integer.parseInt(id);
        // do int id things
    } catch(NumberFormatException e) { 
        // do foo + bar things
    }
}