在您的场景中,我会将用于加载人员约会的逻辑放在一个资源中,并使其可以从另一个资源访问(换句话说,委派资源,我假设您已经在做)。实际逻辑存储在 AppointmentService 中,因此您可以将它与 getPersonAppointments() 一起使用。
这样你就可以调用它:
两者都导致相同的响应。这可能不是最佳实践,但逻辑在一个地方,使其更具可读性和可重用性。
@Path("person")
public class PersonResource {
@GET
@Path("{personId: [0-9]+}/appointments")
public AppointmentsResource loadAppointmentsForPerson(@PathParam("personId") Long personId) {
return new AppointmentsResource(personId);
}
}
@Path("apointments")
class AppointmentResource {
private AppointmentService service;
private Long personId;
public AppointmentResource() {
}
public AppointmentResource(Long personId) {
this.personId = personId;
}
@GET
public Response loadAppointmentsForPerson(@QueryParam("personId") Long personId) {
Long personIdToUse = null;
if (this.personId != null) {
personIdToUse = this.personId;
} else if (personId != null) {
personIdToUse = personId;
} else {
//no input, bad request
}
List<Appointment> appointments = service.getPersonAppointments(personIdToUse)
//create your response from appointments
}
}
当然,在您的 AppointmentResource 中,您将拥有其他内容,例如通过特定 ID 加载约会。