RESTEasy中无法识别JAX-RS应用程序路径

时间:2014-08-06 14:21:29

标签: java path jax-rs resteasy embedded-jetty

我正在使用嵌入式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注释?

1 个答案:

答案 0 :(得分:1)

api-doc points out

  

在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");