Java 使用jersey的JAXRS Rest服务中的问题
使用jersey JAXRS API在Tomcat7上部署了一个演示Rest服务。开发了一个资源类Java 使用jersey的JAXRS Rest服务中的问题,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,使用jersey JAXRS API在Tomcat7上部署了一个演示Rest服务。开发了一个资源类 @Path("/supportdata") public class SupportDataService { public SupportDataService() { // TODO Auto-generated constructor stub } @GET @Produces(MediaType.APPLICATION_XML)
@Path("/supportdata")
public class SupportDataService {
public SupportDataService() {
// TODO Auto-generated constructor stub
}
@GET
@Produces(MediaType.APPLICATION_XML)
public String getSupportData(){
String xmlSupport=null;
xmlSupport="<SupportData><Support><key>path1</key><value>value1</value></Support><Support><key>path2</key><value>value2</value></Support></SupportData>";
return xmlSupport;
}
}
@Path(“/supportdata”)
公共类SupportDataService{
公共支持数据服务(){
//TODO自动生成的构造函数存根
}
@得到
@生成(MediaType.APPLICATION\u XML)
公共字符串getSupportData(){
字符串xmlSupport=null;
xmlSupport=“路径1value1path2value2”;
返回支持;
}
}
应用程序的子类
public class RestApplication extends Application {
public RestApplication() {
// TODO Auto-generated constructor stub
}
@Override
public Set<Class<?>> getClasses() {
// TODO Auto-generated method stub
Set<Class<?>> s=new HashSet<Class<?>>();
s.add(SupportDataService.class);
return s;
}
}
Web.xml contains
<web-app>
<servlet>
<servlet-name>com.jaxrs.RestApplication</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>com.jaxrs.RestApplication</servlet-name>
<url-pattern>/resources</url-pattern>
</servlet-mapping>
</web-app>
Included javax.ws.rs-api-2.0.1.jar from jersey in the project. Deployed it on defaultport of tomcat 7 and calling the url on local host port 8080 and url
公共类重新启动应用程序扩展了应用程序{
公共重新应用程序(){
//TODO自动生成的构造函数存根
}
@凌驾
public Set>s=新哈希集给定。。。
RestApplication
位于com.jaxrs
包中
您具有所需的依赖项[1]
没有其他与你没有展示给我们的东西相关的未知问题
你所需要做的就是让它工作。。。
这就是变化
<url-pattern>/resources</url-pattern>
不使用Maven(ahhhh,whyyy?):
我建议您下载并将所有JAR包含到您的项目中
对于那些对OP的配置摸不着头脑的人来说,这是来自JAX-RS规范:
如果存在应用程序
子类:
- 如果已经有一个servlet处理此应用程序,即具有名为
javax.ws.rs.core.Application
其值是应用程序子类的完全限定名,那么JAX-RS实现不需要额外的配置步骤
- 如果没有servlet处理此应用程序,JAX-RS实现需要动态添加一个servlet,该servlet的完全限定名称必须是应用程序子类的名称。如果
应用程序
子类用@ApplicationPath
注释,则实现需要使用此注释附加的值“/*”
为添加的服务器定义映射。否则,应用程序必须使用指定servlet映射的web.xml
打包。例如,如果org.example.MyApplication
是应用程序子类的名称,则示例web.xml
将是:
1
5.
6 org.example.MyApplication
7.
8.
9 org.example.MyApplication
10/我的资源/*
11
12
web.xml中似乎缺少servlet类?您是否在war中也包括Jersey,或者只是javax.ws.rs-api-2.0.1.jar
?我收到了这个错误javax.servlet.ServletException:没有为servlet com.jaxrs.Restapplication指定servlet类请参阅第二个“给定”。或者使用Maven依赖项,或者从下载包下载并添加所有JAR。我已经测试了这两种方法,使用了几乎完全相同的代码。如果我们将srevlet名称指定为com.jaxrs.RestApplication,这将如何将servlet类的名称标识为javax.ws.rs.core。Application不是servlet,而com.jaxrs.RestApplication是应用程序的一个子类。请阅读规范中的最后一个要点。您可以使用JerseyServletContainer
,但这不是问题所在。我已经用类的名称进行了测试,没有指定servlet,它可以正常工作。
<url-pattern>/resources/*</url-pattern>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.13</version>
</dependency>
1 <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
4 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
5 <servlet>
6 <servlet-name>org.example.MyApplication</servlet-name>
7 </servlet>
8 <servlet-mapping>
9 <servlet-name>org.example.MyApplication</servlet-name>
10 <url-pattern>/myresources/*</url-pattern>
11 </servlet-mapping>
12 </web-app>