使用Jersey 2子资源的RESTful URL?

时间:2017-04-20 12:12:30

标签: java rest jersey-2.0

有没有办法以root身份和子资源使用Resorces? 我想用这种方式调用我的api端点:

GET /persons/{id}/cars      # get all cars for a person
GET /cars                   # get all cars 

如何实现我的资源以使用此网址架构?

人力资源:

@Path("persons")
public class PersonsResource {

    @GET
    @Path("{id}/cars")
    public CarsResource getPersonCars(@PathParam("id") long personId) {
        return new CarsResource(personId);
    }
}

汽车资源:

@Path("cars")
public class CarsResource {

    private Person person;

    public CarsResource(long personId) {
        this.person = findPersonById(personId);
    }

    @GET
    public List<Car> getAllCars() {
        // ...
    }

    @GET
    public List<Cars> getPersonCars() {
        return this.person.getCars();
    }
}

1 个答案:

答案 0 :(得分:0)

你没有这样做,而是将CarsResource的实例注入PersonsResource', and then you call the method of getPersonCars`,如下所示

@Path("persons")
public class PersonsResource {

  @inject
  private CarsResource carsResource;

  @GET
  @Path("{id}/cars")
  public List<Cars> getPersonCars(@PathParam("id") long personId) {
    return carsResource.getPersonCars(personId);
  }
}


@Path("cars")
public class CarsResource {

  @GET
  @Path("all")
  public List<Car> getAllCars() {
    // ...
  }


  public List<Cars> getPersonCars(long personId) {
    Person person = findPersonById(personId);
    return person.getCars();
  }
}