JAX-RS @PathParam для вставки в переменную члена класса? - PullRequest
6 голосов
/ 14 февраля 2011

Я хочу сделать что-то вроде этого:

@Stateless
@Path("/sensors/{sensorid}/version")
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
public class SensorVersionRestView extends VersionRestView{

    @PathParam("sensorid")
    private String sensorid;

    @GET
    @Path("count")
     // so the complete path is i.e. 
     // domain.com/rs/sensors/111211/version/count
    public void getCount() {

        // do something with the sensorId....

    }
}

Но единственное, что я получаю, это null во время выполнения (я использую Glassfish v3 с Джерси).Компилятор и eclipse никогда не упоминают о проблеме с @PathParam в переменной класса-члена.

Что не так с моей конструкцией?

Основная проблема в том, почему я не хочу использоватьвесь путь для каждого метода в этом классе, что существует другой класс, который обрабатывает некоторые операции покоя на сенсорном уровне (deomain.com/rs/sensors/count т.е.)

Ответы [ 2 ]

8 голосов
/ 15 февраля 2011

Я считаю, что вам нужно изменить это на:

@Stateless
@Path("/sensors/{sensorid}/version")
public class SensorVersionRestView extends VersionRestView {

@GET
@Path("count")
@Consumes({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
@Produces({MediaType.APPLICATION_XML, MediaType.TEXT_XML})
 // domain.com/rs/sensors/111211/version/count
public void getCount(@PathParam("sensorid") String sensorid) {
    // do something with the sensorId....
}
}
6 голосов
/ 16 февраля 2011

Поскольку внедрение происходит во время создания объекта, использование этой аннотации в полях класса ресурсов и свойствах компонента поддерживается только для стандартного жизненного цикла класса ресурса для запроса.Классы ресурсов, использующие другие жизненные циклы, должны использовать эту аннотацию только для параметров метода ресурса.- JSR-311 Javadocs

Вы должны иметь возможность аннотировать поля с помощью @PathParam, пока жизненный цикл класса ресурса соответствует запросу.По умолчанию жизненный цикл корневых классов ресурсов определяется по запросу.

РЕДАКТИРОВАТЬ: Я не думаю, что вы можете достичь этого с помощью EJB.Если вы удалите аннотацию @Stateless, она должна работать.

...