我想做这样的事情:
@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和Jersey)。编译器和eclipse从未在成员类变量中提到@PathParam
的问题。
我的构造有什么问题?
主要问题是,为什么我不想在这个类中的每个方法上使用整个路径,还有另一个类处理传感器层上的某些静态操作(deomain.com/rs/sensors/count即)
答案 0 :(得分: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....
}
}
答案 1 :(得分:6)
因为注射发生在物体上 创建时间,使用此注释 在资源类字段和bean上 属性仅支持 默认的每个请求资源类 生命周期。资源类使用 其他生命周期应该只使用它 资源方法的注释 参数。 - JSR-311 Javadocs
只要资源类生命周期是每个请求,您就应该可以使用@PathParam
注释字段。默认情况下,根资源类的生命周期是按请求进行的。
@Stateless
注释,它应该可以正常工作。