我正在使用嵌入式Jetty 9.1.0.v20131115和RESTEasy 3.0.7.Final。我定义了一个JAX-RS应用程序,我知道它正在工作,因为我的所有单例和类都在工作。它看起来像这样:
@ApplicationPath("/foo/")
public class MyApplication extends Application {
然后我有这样的资源:
@Path(value = "bar")
public interface BarResource {
@GET
@Path(value = "test")
public String getTest();
因此,我尝试向GET
发出/foo/bar/test
,但失败了。它仅在我将资源注释更改为以下内容时起作用:
@Path(value = "/foo/bar")
public interface BarResource {
这违背了@ApplicationPath("/foo/")
的全部目的,允许我的资源相对于某个基本路径进行定义。为什么RESTEasy没有获取@ApplicationPath
注释?
答案 0 :(得分:1)
在Servlet容器中发布时,应用程序的值 可以使用web.xml中的servlet-mapping元素覆盖path。
如果您像这样注册RestEasy HttpServletDispatcher,似乎就会发生这种情况:
ServletContextHandler servletHandler = new ServletContextHandler();
servletHandler.setInitParameter("javax.ws.rs.Application", "com.company.MyApplication");
servletHandler.addServlet(new ServletHolder(HttpServletDispatcher.class), "/*");
您可以尝试添加此init参数:
servletHandler.setInitParameter("resteasy.servlet.mapping.prefix", "/application-path");