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

时间:2011-02-14 11:57:09

标签: rest jersey jax-rs

我想做这样的事情:

@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即)

2 个答案:

答案 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注释字段。默认情况下,根资源类的生命周期是按请求进行的。

编辑:我认为您无法使用EJB实现此目的。如果删除@Stateless注释,它应该可以正常工作。