【问题标题】:e ResourceConfig instance does not contain any root resource classese ResourceConfig 实例不包含任何根资源类
【发布时间】:2013-02-27 08:47:30
【问题描述】:

我知道这已在许多帖子中得到解答,但我无法找到正确的解决方案。

我没有在类级别提供@Path,而是在方法级别(因为它扩展了我的 URI)因此我得到 ResourceConfig 实例不包含任何根资源类。部署异常

public class PatientResource {
@GET
@Path("/patient/{patientId}")
@Produces(MediaType.APPLICATION_JSON)
public Patient getPatientDetails(@PathParam("patientId") String patientId) {
      ...
    }

Web xml 条目是

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.clinic.resources</param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet-mapping>

所以当我尝试 serv-name:8080/WAR-Id/rest/patient/1 时,我得到了上述异常。请注意,如果我在类级别添加@Path,我可以摆脱异常,但它不必要地扩展了 URL,在 web xml 中提供 /* 对于项目也是不可行的。底线 - 是否有必要在班级级别提供@Path

谢谢

【问题讨论】:

    标签: jersey tomcat7 jax-rs


    【解决方案1】:

    鉴于您有一个 Patient 资源,您通常会放置一个

    @Path("/patient")
    

    在课堂上,然后是

    @Path("{patientId}")
    

    关于方法。

    【讨论】:

    • 这是一个好方法。但是我几乎没有像 getAllPatients 这样的其他方法,在这种情况下,像“患者/所有”这样的 uri 看起来不太好。
    • 获取所有患者的传统 RESTful 方式是使用 URL /patient(完全传统的您通常使用复数作为根资源,因此要获取所有患者使用 /patients,以访问患者 3 使用 /patients/3)。如果你这样做,那么你的类有一个@Path("/patients") 注释,你的getAll() 没有路径注释,你的getPatient() 有一个@Path("{patientId}") 注释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2015-08-31
    相关资源
    最近更新 更多