Java:Jersey REST服务URL映射问题

时间:2019-06-03 21:54:36

标签: java rest jersey

我正在尝试为Java Web应用程序配置jersey rest服务。我面临的问题是我只能在根服务URL上获得所需的响应。我尝试设置的任何其他URL都返回HTTP 404 Not Found。

以下配置有效:

package cz.mono.wb.rest
@Path("/")
public class UserService 
{
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String respondAsReady() {
        return "Web service is ready!";
    }
}

当我在浏览器中访问URL server:port / contextRoot / rest /时,它返回正确的响应,但是当我尝试设置@Path注释时,例如:

package cz.mono.wb.rest
@Path("/user")
public class UserService 
{
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String respondAsReady() {
        return "Web service is ready!";
    }
}

并尝试访问URL

server:port/contextRoot/rest/user/

server:port/contextRoot/rest/user

其返回404。

Jersey配置如下所示: web.xml

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
    com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>cz.mono.wb.rest</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>

pom.xml

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19</version>
</dependency>

3 个答案:

答案 0 :(得分:1)

在配置中将url-pattern指定为:

<url-pattern>/rest/*</url-pattern>

现在,您在资源中的路径之前不需要/。只需尝试@Path("user"),它现在应该可以正常工作。

答案 1 :(得分:1)

只是看着您的代码,但有一个例外,它说它已禁用JAR-RS:

 (EJBComponentProviderFactoryInitilizer.java:89) - The EJB interceptor binding API is not available. JAX-RS EJB support is disabled.

Mosto有可能解决此问题将解决您的问题。 希望我能为您解决问题。

答案 2 :(得分:0)

路径/user是绝对路径(请注意,在/之前加斜杠user),这意味着它指向主机名的根。因此,它实际上指向<hostname>/user,而不指向<hostname>/root/user。因此,要解决此问题,只需将@Path批注的值更改为"/root/user"