Решение пути RestEasy

Я получаю что-то вроде этого

import javax.ws.rs.GET;
import javax.ws.rs.Path;

public class xxx
{

  @GET
  @Path(value = "path1")
  public Response m1(@QueryParam(value = "a") String a)
  {
    ...
  }



  @GET
  @Path(value = "path2")
  public Response m2(@QueryParam(value = "b") String b)
  {
    ...
  }

}

С помощью restEasy я получаю HTTP-статус 404. Не удается найти ресурс для относительного каждый раз, когда я пытаюсь получить путь1 или путь2. Например, http://someip:8080/myserv/services/path1?a=asd

Здесь http://docs.jboss.org/resteasy/docs/1.2.GA/userguide/html_single/#Using_Path Я прочитал

Аннотация @javax.ws.rs.Path должна существовать либо в классе, либо в методе ресурса. Если он существует и в классе, и в методе, относительный путь к ресурсному методу является конкатенацией класса и метода.


person terry207    schedule 28.01.2011    source источник


Ответы (2)


Удалите services, если он не является частью сопоставления или пути вашего сервлета.

(Также дополнительная информация о сопоставлении вашего пути/сервлета поможет нам лучше понять)

РЕДАКТИРОВАТЬ:

Таким образом, ваш проект развернут с именем контекста myapp + у вас есть префикс сервисов + путь, определенный в классе ресурсов. + сопоставление сервлета /*, поэтому /myapp/services/path должно работать.

Вы можете увеличить уровень ведения журнала для классов отдыха, чтобы увидеть, что не так. или в режиме отладки вы можете увидеть, какой путь запрашивается в PathHelper.replaceEnclosedCurlyBraces

РЕДАКТИРОВАТЬ2:

Если вы выполняете автоматическое сканирование, классы должны быть аннотированы с помощью @Provider.

Отдых v1.2.1

@Provider
@Path("/")
public class xxx
{

  @GET
  @Path(value = "path1")
  public Response m1(@QueryParam(value = "a") String a)
  {
    ...
  }



  @GET
  @Path(value = "path2")
  public Response m2(@QueryParam(value = "b") String b)
  {
    ...
  }

}
person fmucar    schedule 28.01.2011
comment
У меня resteasy.servlet.mapping.prefix установлен в /services - person terry207; 28.01.2011
comment
и для resteasy.scan установлено значение true. Что еще я должен сказать Тебе? - person terry207; 28.01.2011
comment
В 99,99% случаев компьютеры не делают ошибок :) Так что единственный способ - отладить и посмотреть, что не так. Одна вещь, которую я не вижу в вашем классе, это аннотация @Component, вы аннотировали свой класс ресурсов? Scan=true требует этой аннотации. - person fmucar; 28.01.2011
comment
У меня есть второй класс только с одним методом с аннотацией @path для класса, и он работает нормально, у меня нет аннотации @component, я сейчас проверю - person terry207; 28.01.2011
comment
Извините за @Component, мой плохой. Я немного обновлю исходный ответ. - person fmucar; 28.01.2011
comment
Это должно быть @Ресурс. @Component также работает, если вы используете spring - person fmucar; 28.01.2011
comment
Как должна выглядеть эта аннотация @resource для сохранения текущего URL-адреса: someip:8080/myserv/services /path1?a=asd ?? - person terry207; 28.01.2011
comment
Я не знаю, как должна выглядеть моя аннотация @Resource - person terry207; 28.01.2011
comment
просто аннотируйте свой класс с помощью @Resource. см. выше. - person fmucar; 28.01.2011
comment
вы используете этот javax.annotation.Resource , он имеет пустую строку имени по умолчанию, вам не нужно ее указывать. - person fmucar; 28.01.2011
comment
да, я использую javax.annotation.Resource, предоставлю журнал через несколько минут - person terry207; 28.01.2011
comment
попробуйте также @Provider, какую версию jdk resteasy вы используете? - person fmucar; 28.01.2011
comment
Я должен был спросить об этом давно. Я использую версию 2.0.3, поэтому она может отличаться от той, которую вы используете, поскольку изменился основной номер версии, что означает большое изменение с v1 на v2. - person fmucar; 28.01.2011
comment
Вот почему я добавляю ссылку на документацию, вы не представляете, как это сделать с помощью 1.2.1? Я должен использовать эту версию - person terry207; 28.01.2011
comment
если вы можете создать проект быстрого запуска, я могу взглянуть на него - person fmucar; 28.01.2011
comment
Я перепроверил, и с @Provider и @Path(/), и он начал работать с 1.2.1, большое спасибо! - person terry207; 28.01.2011
comment
рад слышать. Я обновлю ответ, если кто-нибудь прочитает это позже. - person fmucar; 28.01.2011

Вы пытались удалить значение = в обозначении пути? Я не на 100% знаю, для чего используется value=, так как я новичок в JAX-RS, но, возможно, попробуйте просто сделать:

@GET  
@Path("path1")  
public Response m1(@QueryParam(value = "a") String a)  
{  
  ...  
}  
person Mike    schedule 28.01.2011
comment
Я попробую, я думаю, это нормально - person terry207; 28.01.2011
comment
Если это не сработает, не могли бы вы убедиться, что ваше сопоставление сервлета в файле web.xml имеет вид ‹servlet-name›JAX-RS REST Servlet‹/servlet-name›‹url-pattern›/services/*‹/url-pattern › - person Mike; 28.01.2011
comment
Удаление value= не имеет никакого эффекта, это значение по умолчанию. - person Elazar Leibovich; 24.07.2012
comment
как Элазар коснулся, но не объяснил, @Path(xxx) является синтаксическим сахаром для @Path(value=xxx) - person Quartz; 26.05.2014