参数化REST @Path

时间:2011-05-31 15:19:35

标签: path parameterized

我对如何使参数化的@PATH起作用感到茫然。

这是我的web.xml

<servlet-mapping>
    <servlet-name>JerseyServlet</servlet-name>
    <url-pattern>/ND/*</url-pattern>
</servlet-mapping>

这是我的资源类:

@Path("/ND")
public class TransactionResource 
{
@Context UriInfo uriInfo;

public TransactionResource() 
{   
}

@GET 
@Produces(MediaType.TEXT_PLAIN)
public String itWorks()
{
    return String.format("Get is OK. %s", DateUtil.now());
}

@GET @Path("/NJ")
@Produces(MediaType.TEXT_PLAIN)
public String itWorksForState()
{
    return String.format("Get is OK for NJ. %s", DateUtil.now());
}

@POST
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_XML)
public String addTransaction(Transaction pTransaction) throws Exception
{
    //some code here        
    return "Successful Transmission";
}

当我在URL http://my_web_app:8080/ND进行GET或POST时,两种方法都可以正常工作。 但由于某些原因,URL http://my_web_app:8080/ND/NJ处的GET方法始终返回404-NotFound。

我在这里做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

你有4级路径:

  1. 服务器中的网络应用程序路径上下文:也许 myapp
  2. web.xml中Jax-Rs servlet的路径:这里/ ND /,但我建议 / ws
  3. 资源的路径:类上面的第一个@Path。你应该有@Path("transaction")
  4. 然后在每个方法上面添加一个可选的@Path。假设你没有在任何方法中添加任何@Path。
  5. 现在你有了     @Path( “交易”)     公共类TransactionResource     {

        @GET 
        @Produces(MediaType.TEXT_PLAIN)
        public String itWorksForState()
        {
          return String.format("Get is OK for REST. %s", DateUtil.now());
        }
    }
    

    转到Firefox并输入  http://my_web_app:8080/myapp/ws/transaction:您应该阅读日期

    如果你添加

        @Path("morepath")
        @GET 
        @Produces(MediaType.TEXT_PLAIN)
        public String itWorksForState()
        {
          return String.format("Get is OK for REST. %s", DateUtil.now());
        }
    

    然后你必须去http://my_web_app:8080/myapp/ws/transaction/morepath