我的pom:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.7</version>
</dependency>
的web.xml
<web-app>
<display-name>jerseysample</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.adaequare.rest.config.JerseyResourceInitializer</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
我的resourceonfig实现:
package com.adaequare.rest.config;
import org.glassfish.jersey.server.ResourceConfig;
public class JerseyResourceInitializer extends ResourceConfig {
public JerseyResourceInitializer() {
packages(true, "com.adaequare.resource");
}
}
我的资源:
package com.adaequare.resource;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html><title>Hello Jersey</title><body><h1>Hello Jersey</h1></body></html>";
}
@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Path("/xml")
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
}
我正在使用&#34;动态网络模块&#34;项目方面和Tomcat 7的3.0版和Java 1.7版。 应用程序部署(成功?)没有任何错误,因为我看到默认的jsp页面,但当我转到以下任何一个时:
http://localhost:8080/myproject/rest/hello
http://localhost:8080/myproject/rest/hello/sample
http://localhost:8080/myproject/rest/hello/text
http://localhost:8080/myproject/rest/hello/xml
我得到了404.什么阻止我的资源类正确返回?我错过了什么或有什么不对吗?该项目在eclipse kepler中没有显示任何错误。
部署程序集是:
/src/main/java
/src/main/resources
/src/main/webapp
/target/m2e-wtp/web-resources
Maven Dependencies
答案 0 :(得分:1)
我刚刚测试过您的资源,并且没有任何问题。
我没有看到你在扩展ResourceConfig
并将其作为init-param
使用时会受益匪浅(你当然可以比这个例子做得更多)。
我会废弃该内容,只需将以下内容添加为唯一直接提取init-param
的{{1}}。
Resource
(您也可以使用&#34; jersey.config.server.provider.packages&#34;如果您愿意,请指定包名称)
此外,我总是发现通过mbeans启用的Jersey monitoring statistics确实有助于确定我的资源是否已正确部署。为此,添加以下<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>com.adaequare.resource.Hello</param-value>
</init-param>
,启动jconsole(在java / bin目录中)并连接到流程 - jersey提供了有关已部署资源的大量信息
init-param
最后,请参阅this以获取使用Jetty的示例(此测试服务器是我插入您的资源以进行测试的地方)
答案 1 :(得分:0)
我对Jersy并不熟悉,但似乎问题是你只在类级别上映射/你好,因此它无法确定需要调用哪种方法。因此,你得到了404。
尝试类似:
@Path("/hello")
public class Hello {
@GET
@Path("/html")
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html><title>Hello Jersey</title><body><h1>Hello Jersey</h1></body></html>";
}
@GET
@Path("/text")
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Path("/xml")
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey" + "</hello>";
}
}
并查看例如http://localhost:8080/myproject/rest/hello/xml
是否有效。