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)
我相信你需要改变它:
@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)
由于注入发生在对象创建时,因此仅对默认的每请求资源类生命周期支持在资源类字段和bean属性上使用此批注.使用其他生命周期的资源类应仅在资源方法参数上使用此注释.- JSR-311 Javadocs
@PathParam只要资源类lifecyle是每个请求,您就应该能够注释字段.默认情况下,根资源类的生命周期是每个请求.
编辑:我认为你不能使用EJB实现这一点.如果删除@Stateless注释,它应该可以工作.