首页 > 解决方案 > Jersey REST 查询参数组合验证

问题描述

我有一个使用 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
    }
    ...
}

这看起来真的很难看。有没有办法以更清洁的方式实现这一目标?

标签: javarestjerseyjax-rsquery-parameters

解决方案


如果我是你,我只会使用三种不同的 API。一个只需要 param1 - 如果 findMyResourceByParam1 调用(甚至可能不是作为查询参数,而是作为路径参数,因为它是必需的),一个只需要 param2,依此类推。

这也使得使用 API 的人不太可能弄乱需要指定的参数。

此外,这是相当主观的,但 IMO 查询参数应该是可选的,如果您的 API需要一个或多个参数,那么它们应该是路径参数而不是查询参数。


推荐阅读