Jersey / JAX-RS中的嵌套内部类

时间:2014-12-24 23:53:05

标签: java web-services rest jersey jax-rs

我有一个完美的资源:

@Path("/adoptable")
public class AdoptableAnimalsResource {

  @GET
  @Produces(MediaType.TEXT_PLAIN)
  public String get() 
  {
    return "dogs";
  }
}

现在,我该如何将这个类变成嵌套的内部类?  例如,

public class Grouper
{
  @Path("/adoptable")
  public class AdoptableAnimalsResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String get() 
    {
      return "dogs";
    }
  }
}

当我尝试它时,我得到404 Not Found错误,表明Jersey不会将内部类视为资源。

1 个答案:

答案 0 :(得分:5)

您需要使用Sub-Resource Locators。基本上,您将在Grouper类中使用一个方法,该方法将实例化AdoptableAnimalsResource类。 AdoptableAnimalsResource不应该有@Path注释。它可以,但它会被忽略。它的方法可以有子资源@PathGrouper类中的方法应该@Path标识AdoptableAnimalsResource子资源。

所以它可能看起来像

@Path("/groups")
public class Grouper {

    @Path("/adoptable")
    public AdoptableAnimalsResource animalSubResource() {
        return new AdoptableAnimalsResource();
    }

    public class AdoptableAnimalsResource {

        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String get() {
            return "dogs";
        }
    }
}