0

我不知道如何让参数化的@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。

我在这里做错了什么?

谢谢

4

1 回答 1

0

您有 4 级路径:

  1. 您的 Web 应用程序上下文在服务器中的路径:可能是myapp
  2. web.xml 中 Jax-Rs servlet 的路径:这里是 /ND/,但我建议/ws
  3. Resource 的路径:类上方的第一个 @Path。你应该有@Path("transaction")
  4. 然后是每个方法上方的可选@Path。假设您没有在任何方法中添加任何@Path。

现在你有 @Path("transaction") public class 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

于 2011-10-06T08:26:56.330 回答