【问题标题】:Jersey REST query parameter combinations validationJersey REST 查询参数组合验证
【发布时间】:2019-12-15 01:23:29
【问题描述】:

我有一个使用 Java 和 Jersey 实现的 RESTful 资源。

允许有以下任意一种查询参数组合

  • queryParam1 或
  • queryParam2 或
  • queryParam3 & queryParam4

我目前实现如下:

@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
    }
    ...
}

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

【问题讨论】:

    标签: java rest jersey jax-rs query-parameters


    【解决方案1】:

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

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

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

    【讨论】:

    • 很遗憾,我无权拆分为 3 个不同的 api。
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多