JAX-RS @PathParam注入类成员变量?

ger*_*rry 6 rest jax-rs jersey

我想做这样的事情:

@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....

    }
}
Run Code Online (Sandbox Code Playgroud)

但我唯一得到的是null运行时(我使用带有Jersey的Glassfish v3).编译器和eclipse从未提到@PathParam成员类变量的问题.

我的构造有什么问题?

主要问题是,为什么我不想在这个类中的每个方法上使用整个路径,还有另一个类处理传感器层上的一些休息操作(deomain.com/rs/sensors/count ie)

Mik*_*ler 8

我相信你需要改变它:

@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....
}
}
Run Code Online (Sandbox Code Playgroud)


Jor*_*lan 6

由于注入发生在对象创建时,因此仅对默认的每请求资源类生命周期支持在资源类字段和bean属性上使用此批注.使用其他生命周期的资源类应仅在资源方法参数上使用此注释.- JSR-311 Javadocs

@PathParam只要资源类lifecyle是每个请求,您就应该能够注释字段.默认情况下,根资源类的生命周期是每个请求.

编辑:我认为你不能使用EJB实现这一点.如果删除@Stateless注释,它应该可以工作.