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

Ele*_*rks 2 java rest web-services jax-rs jersey

我有这个完美的资源:

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

  @GET
  @Produces(MediaType.TEXT_PLAIN)
  public String get() 
  {
    return "dogs";
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我怎样才能将这个类变成嵌套的内部类? 例如,

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

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String get() 
    {
      return "dogs";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*tha 6

您需要使用子资源定位器.基本上,您将在Grouper类中有一个方法,它将实例化AdoptableAnimalsResource该类.本AdoptableAnimalsResource不应该有一个@Path注释.它可以,但它会被忽略.它的方法可以有子资源@Path.类中的方法Grouper应该具有@PathAdoptableAnimalsResource子资源的标识.

所以它可能看起来像

@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";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 是.然后为`Grouper`类创建路径`"/"`.但它必须用`@Path`注释才能使它成为一个可访问的资源类 (2认同)