我有一个使用Java和Jersey实现的RESTful资源。
允许具有以下任一查询参数组合
我目前以如下方式实现此目标:
@GET
@Path("/my-resource")
public MyResource findMyResource(
@QueryParam("param1") String param1,
@QueryParam("param2") String param2,
@QueryParam("param3") String param3,
@QueryParam("param4") String param4) {
if (param1 != null && (param2 == null && param3 == null && param4 == null)) {
...
} else if (param2 != null && (param1 == null && param3 == null && param4 == null)) {
...
} else if (param3 != null && param4 != null && (param1 == null && param1 == null)) {
...
} else {
// return 400 BAD REQUEST
}
...
}
这看起来真丑。有没有一种更清洁的方式来实现这一目标?
如果我是你,我将只使用三种不同的API。仅接受param1的一个-如果findMyResourceByParam1(可能因为它是必需的,甚至不作为查询参数而是作为路径参数)进行调用,仅接受param2,等等。
这也减少了使用API的人准确地弄乱需要指定哪些参数的可能性。
而且,这是相当主观的,但是IMO查询参数应该是可选的,如果您的API requires一个或多个参数,那么它们应该是路径参数,而不是查询参数。