这件事已经让我困惑了一段时间..我正试图在Jetty中嵌入一个Jersey容器.按照示例我可以嵌入Jersey,我看到暴露的REST方法正在暴露.然而,由于一些奇怪的原因,我的泽西岛确实返回了404.看起来泽西岛没有能力解决正确的终点.不幸的是它没有告诉我原因,只是抛出一个NotFoundException :-(.
我100%肯定我的方法被调用.该方法中的System.out.println显示在控制台中,我的Eclipse调试器清楚地传递了set断点.我是否使用Jersey 2.0,2.3,2.4,1,2.4并不重要.所有都有相同的结果..这里是我的配置的代码片段:
StartJetty.java:
final int mainport = 9123;
Server jettyServer = new Server(mainport);
HandlerCollection handlerCollection = new ContextHandlerCollection();
jettyServer.setHandler(handlerCollection);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/");
jerseyServlet.setInitOrder(1);
jerseyServlet.setInitParameter("jersey.config.server.provider.packages", "com.test.rest");
handlerCollection.addHandler(context);
jettyServer.start();
jettyServer.join();
Run Code Online (Sandbox Code Playgroud)
REST资源的代码段: com.test.rest.PersonsRSImpl.class:
@Path("/persons")
@Produces( MediaType.APPLICATION_JSON)
public class PersonsRSImpl {
private PersonManager personMgr = PersonManager.getInstance();
@Path("/list")
public Collection<Person> list() {
System.out.println("In Person::list" );
return personMgr.getPersons();
}
}
Run Code Online (Sandbox Code Playgroud)
我的Person对象是一个简单的POJO,带有一些JAXB注释.添加/删除它们完全没有区别.
最后但并非最不重要的: pom.xml http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>integrationexample</artifactId>
<packaging>jar</packaging>
<version>1.0.0-SNAPSHOT</version>
<name>Test project</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.outputEncoding>UTF-8</project.build.outputEncoding>
<jetty.version>7.5.4.v20111024</jetty.version>
<jersey.version>2.4.1</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId> …Run Code Online (Sandbox Code Playgroud)