Параметризованный REST @Path - PullRequest
0 голосов
/ 31 мая 2011

Я не знаю, как заставить параметризованный @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";
}

Когда я выполняю GET или POST по URL http://my_web_app:8080/ND, тогда оба метода работают нормально.Но по некоторым причинам метод GET по URL http://my_web_app:8080/ND/NJ всегда возвращает 404-NotFound.

Что я здесь не так сделал?

Спасибо

1 Ответ

0 голосов
/ 06 октября 2011

У вас есть 4 уровня пути:

  1. Путь вашего веб-приложения Контекст на сервере: Возможно myapp
  2. Путь сервлета Jax-Rs в web.xml: здесь / ND /, но я бы предложил / ws
  3. Путь ресурса: первый @Path над классом.Вы, вероятно, должны иметь @Path("transaction")
  4. Затем необязательный @Path над каждым методом.Допустим, вы не добавили ни один @Path ни в какой метод.

Теперь у вас есть открытый класс @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

...