Java 未找到Jersey REST Web服务子资源
起初在我的web服务器中,我只有一个RESTservlet。比如:Java 未找到Jersey REST Web服务子资源,java,web-services,rest,jersey,Java,Web Services,Rest,Jersey,起初在我的web服务器中,我只有一个RESTservlet。比如: @Path("/") public class Controller { @GET @Produces({ MediaType.TEXT_HTML }) public Response get(@Context UriInfo info) throws Exception { ... } @GET @Path("resource1") @Produces({ MediaType.TEXT_H
@Path("/")
public class Controller {
@GET
@Produces({ MediaType.TEXT_HTML })
public Response get(@Context UriInfo info) throws Exception {
...
}
@GET
@Path("resource1")
@Produces({ MediaType.TEXT_HTML })
public Response resource1() throws Exception {
...
}
...
}
以及web.xml:
<servlet>
<servlet-name>rest</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>xpto.mypack1;xpto.mypack2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
休息
com.sun.jersey.spi.container.servlet.ServletContainer
com.sun.jersey.config.property.packages
xpto.mypack1;xpto.mypack2
1.
休息
/*
但后来我想向服务器添加一些静态html,所以我将servlet映射更新为
/休息/*
控制器servlet类的@Path指令从“/”到“/rest”。一切正常,但带有@path指令的控制器的子资源或方法停止工作。。即:
- /工作正常,因为我在根目录下有一个index.html页面
- /rest工作正常,它调用servlet的get方法
- /rest/resource1返回404 http代码
- X-Jersey-Trace-002接受右侧路径java.util.regex.Matcher[pattern=/rest(/.*)region=0,11 lastmatch=/rest]:“/rest”->“/rest”:”
- X-Jersey-Trace-003接受资源:“rest”->@Path(“/rest”)xpto.mypack.Controller
- X-Jersey-Trace-000接受根资源类:“/rest”
- X-Jersey-Trace-001匹配路径“/rest”->“/application.wadl(/)?”,“/rest(/)?”
- X-Jersey-Trace-002匹配的异常映射程序:com.sun.Jersey.api。NotFoundException@4fd41dc3->xpto.myclass
- X-Jersey-Trace-003将异常映射到响应:com.sun.Jersey.api。NotFoundException@4fd41dc3->404(未找到) X-Jersey-Trace-000接受根资源类:“/resource1” X-Jersey-Trace-001匹配路径“/resource1”->“/application.wadl(/)?”,“/rest(/)?”
我希望有人能帮助我。如果将servlet映射定义为
/rest/*
,请不要在资源的@Path
注释中重复/rest
。也就是说,您所需要做的就是保持控制器的原样(在上面的问题中),只需更改servlet映射即可。资源可用的URL为:
<application_context_path>/<servlet_mapping>
您是否尝试过将路径设置为
(“/resource1”)
是的,我尝试过,结果相同。我试着调试以找出发生了什么,我发现与模式进行比较的url部分只是“rest”之后的部分。以rest结尾的部分被视为“基本url”。这让我很困惑。顺便说一下,我用的是tomcat(现在我什么都看不懂了……我从控制器@Path中删除了斜杠,使之成为@Path(“”),一切正常……有人能解释一下原因吗?:SDo你是说用“/rest”作为servlet\u映射和@Path(“/”)还是“/rest/*”和@Path(“/”)?
<application_context_path>/rest/rest/*