在JAX-RS中按方法覆盖类中的@Path注释

时间:2016-05-05 11:42:27

标签: java jersey

我有一个我用java维护的REST API服务(通过jersey,JAX-RS)

我想在我的服务中支持以下路线:

for %%x in (*.J_E, *.J_T, *.J_I, *.BCC, *marmite*.*) 

然而,它结合了类的/api/v1/users/{userId}/cars 注释。 e.g。

@Path

这是我的服务类:

/api/v1/cars/api/v1/users/{userId}/cars

有没有办法覆盖它?

2 个答案:

答案 0 :(得分:3)

请注意以下事项:

  • 中的@Path注释指定根资源
  • 方法中的@Path注释指定根资源的子资源

当放置在方法上时,@Path注释不会覆盖类的@Path注释。 JAX-RS / Jersey使用@Path注释执行分层匹配。

所以,你可以尝试:

@Path("api/v1")
public class CarsService {

    @GET
    @Path("/cars")
    public Response getCars() {
        ...
    }

    @GET
    @Path("/users/{userId}/cars")
    public Response getUserCars(@PathParam("userId") Long userId) {
        ...
    }
}

但是,您考虑过使用不同的资源类吗?

@Path("api/v1/cars")
public class CarsService {

    @GET
    public Response getCars() {
        ...
    }
}
@Path("api/v1/users")
public class UsersService {

    @GET
    @Path("{userId}/cars")
    public Response getUserCars(@PathParam("userId") Long userId) {
        ...
    }
}

有关资源的更多详细信息,请查看documentation

答案 1 :(得分:-1)

您应该将方法的@Path注释更改为:

@Path("users/{userId}/cars")

通过这种方式,连接类和方法@Path注释的结果路径将产生您想要的路径。