起初在我的web服务器上,我只有一个REST servlet。喜欢的东西:Jersey找不到REST webservice子资源
@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>
但后来我想了一些静态html添加到服务器,所以我更新了servlet映射到 /REST/*
和控制器servlet类的@Path指令从“/”到“/ rest”。一切工作正常,但子资源或控制器的方法与@Path指令,停止工作..即:
- /正常工作,因为我有一个index.html页在根
- /休息工作正常,它调用我的servlet
- /REST /资源1返回404 HTTP代码的get方法...
任何帮助吗?我已经尝试过/后各@Path指令之前的组合的列表,没有成功...非常感谢
一个更新:
我使用的跟踪UTIL,得到了以下结果:
为/ [应用名称] /休息(它的工作原理):
- X-新泽西州痕量-002接受右手路径java.util.regex.Matcher中[图案= /休息(/.*)? X-Jersey-Trace-003接受资源:“休息” - > @路径(“/休息”):“/ rest” - >“/休息”:“”
- xpto.mypack.Controller
- X-新泽西州跟踪的000根接受资源类: “/休息”
- X-新泽西州跟踪的001匹配路径 “/休息” - >“/application.wadl(/。 )?“,”/ rest(/。)?“
用于/ [应用程序名]/REST /资源1(它不工作):
- X-新泽西州跟踪的002匹配的异常映射:com.sun.jersey.api。 NotFoundException @ 4fd41dc3 - > xpto.myclass
- X-新泽西州痕量-003映射例外响应:[email protected] - > 404(未找到) X-新泽西州痕量-000接受根资源类:“/ resource1” X-Jersey-Trace-001匹配路径“/ resource1” - >“/application.wadl(/。)?”,“/ rest(/。)?”
我希望它可以帮助别人帮我..
你有没有试过设置路径到'(“/ resource1”)' – ant
是的,我试过了,结果相同。我试图调试以弄清楚发生了什么,并且我发现与模式相比较的url部分只是“休息”之后的部分。以休息结束的部分被认为是“基础网址”。这让我很困惑。顺便说一句,我使用的是tomcat。 :( – cattox
现在我无法理解这一切......我从控制器@Path删除斜线,使其@Path(“”),一切工作正常......任何人都可以解释我为什么?:S – cattox