我有两个REST端点,一个用于删除所有员工的一些数据,另一个用于按员工ID删除特定员工的数据。
这两种方法是:
@Path("/{empId}/data")
@DELETE
public Response deleteEmpDataa(@PathParam("empId") final String empId) { }
@Path("/all/data")
@DELETE
public Response deleteAllData(){}
现在,当我想删除所有员工数据并从postman chrome插件进行查询
时 http://localhost/rest/mymapping/all/data
我希望它能调用第二种方法deleteAllData
。相反,它使用PathParam all
调用第一个方法。
这是订购问题吗?我们如何解决这个问题?
答案 0 :(得分:3)
您需要使用RegEx模式到您的@Path,按ID删除员工。例如,如果您的员工ID始终是一个数字,您可以尝试类似:
@Path("/{empId:[0-9]*}/data")
因为'所有'不是数字,第二个Rest模式将被调用。
答案 1 :(得分:2)
all
是{empId}
的匹配值。Employee
视为真正的RESTful资源(不是一种好的做法)。在您当前的实施中,您可以:
@Path("/employees/{empId}")
@DELETE
public Response deleteEmpDataa(@PathParam("empId") final String empId) { }
@Path("/employees")
@DELETE
public Response deleteAllData(){}
而且,如果有更好的设计,你会得到:
@Path("/employees/{empId}")
public EmployeeResource getEmployee(@PathParam("empId" final String empId) {
Employee e = loadEmployee(empId);
return new EmployeeResource(employee);
}
并删除所有员工:
@Path("/employees")
@DELETE
public Response deleteAllEmployees() {
// Delete all employees
return Response.status(204).build();
}
然后EmployeeResource
将是:
@Provider
public class EmployeeResource {
private final Employee e;
@DELETE
public Response delete() {
// Delete Employee
return Response.status(204).build();
}
}
答案 2 :(得分:0)
当JAX-RS命令端点时,它们很少有规则
/{emdId}/data/
优先于/all/data
。