RESTEasy:在@PathParam("数据库")中,程序如何能够确定"数据库"是什么?可能是其他任何占位符?

时间:2014-08-21 03:24:25

标签: resteasy

我正在查看此代码,但请以#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;。

提前致谢。

1 个答案:

答案 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)