我正在查看此代码,但请以#34;数据库"下面 in public Object getDatabase(@PathParam(" database")String db)":
package com.restfully.shop.services;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
@Path("/customers")
public class CustomerDatabaseResource
{
protected CustomerResource europe = new CustomerResource();
protected FirstLastCustomerResource northamerica = new FirstLastCustomerResource();
@Path("{database}-db")
public Object getDatabase(@PathParam("database") String db)
{
if (db.equals("europe"))
{
return europe;
}
else if (db.equals("northamerica"))
{
return northamerica;
}
else return null;
}
}
在单元测试中,有两行代码:
Response response =
client.target("http://localhost:8080/services/customers/europe-db").request().post(Entity.xml(xml));
以及
Response response = client.target("http://localhost:8080/services/customers/northamerica-db").request().post(Entity.xml(xml));
问题:@PathParam(&#34;数据库&#34;)字符串数据库如何能够提取文本&#34;欧洲&#34;和&#34; northamerica&#34; ?
&#34;数据库&#34;占位符,最值得注意的是它的类型为 String ,因为接下来是&#34; String db&#34; in& #34; @PathParam(&#34;数据库&#34;)字符串db&#34;。
提前致谢。
答案 0 :(得分:1)
您可以在@Path
注释中使用URI模板。基本上,您使用花括号中的标识符定义URI的变量部分:
/customers/{id}/orders
/~{username}
/holidays/usa/{date}-{no}.jpg
花括号中的部分不需要是完整路径段。 /{a}-{b}foo{d}_{e}/
完全有效(如果您找到了一个有意义的示例)。
您还可以在URI模板中使用正则表达式。如果你是不想接受可以使用的数字的用户名:
@Path("users/{username: [a-zA-Z]}")
/users/pete1
将无法与资源方法匹配,并且会生成404.有关详细信息,请参阅this article。
如果花括号中的标识符与@PathParam
注释的值匹配,则RESTeasy将填充相应的参数。您可以将任何原语或类型与接受单个String参数作为参数类型的构造函数一起使用(更多可能的类型为mentioned in the documentation)。所以如果你有这个域类
class OrderId {
public OrderId(String orderId) {
...
}
}
你可以直接使用它:
@Path("/orders/{id}")
public Order get(@PathParam("id") OrderId id)