Jersey @Path不在Jetty + servlet中工作

时间:2015-05-06 18:10:54

标签: java jersey jetty

我没有得到Jetty + servlet + Jersey的组合工作。以下是我的步骤:

1。的pom.xml

<packaging>war</packaging>
...
<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.17</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.17</version>
    </dependency>
</dependencies>

2。的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="false" version="3.1">
  <servlet>
    <servlet-name>org.example.MyApplication</servlet-name>
  </servlet>
  <servlet-mapping>
    <servlet-name>org.example.MyApplication</servlet-name>
    <url-pattern>/resources</url-pattern>
  </servlet-mapping>
</web-app>

第3。来源

package org.example;

import org.glassfish.jersey.server.ResourceConfig;
import javax.ws.rs.ApplicationPath;

@ApplicationPath("resources")
public class MyApplication extends ResourceConfig {
    public MyApplication() {
        packages("org.example");
    }
}

package org.example;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
    @GET
    public String get() {
        return "{\"hello\": 1337}";
    }
}

我部署通过执行mvn clean compile package创建的WAR,将其复制到web-apps目录。访问以下URL将返回我的硬编码JSON:

http://localhost:8080/test-1.0-SNAPSHOT/resources
{"hello": 1337}

现在,我更改了资源中的@Path

@Path("/bla")
@Produces(MediaType.APPLICATION_JSON)
public class MyResource {
    @GET
    public String get() {
        return "{\"hello\": 1337}";
    }
}

现在,以下网址似乎都不起作用:

http://localhost:8080/test-1.0-SNAPSHOT/resources/bla
http://localhost:8080/test-1.0-SNAPSHOT/bla
http://localhost:8080/test-1.0-SNAPSHOT/resources
http://localhost:8080/test-1.0-SNAPSHOT/resources/bla/
...

我尝试了几种组合,但我无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

尝试将此添加到 web.xml 。这将启用针对平针织物的包裹扫描,因此将扫描您的包裹org.example

<servlet>
        <servlet-name>Services</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>
                org.example
            </param-value>
        </init-param>
        <init-param>
            <param-name>jersey.config.server.provider.scanning.recursive</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Services</servlet-name>
    <url-pattern>/resources/*</url-pattern>
</servlet-mapping>

在这里你可以看到一个完整的工作示例(为tomcat定义),但我已经在jetty上成功移植了它。

https://github.com/DominikAngerer/java-GsonJerseyProvider/blob/master/WebContent/WEB-INF/web.xml

这里也是一个小小的自助帮助 - 它使用Jersey作为带有码头的API部件 - 它还有一个很好的教程,可以帮助你很多! https://github.com/amacoder/demo-restWS-spring-jersey-jpa2-hibernate