Jersey REST查询参数组合验证

问题描述 投票:0回答:1

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

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

  • queryParam1 OR
  • queryParam2 OR
  • 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个回答
0
投票

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

这也减少了使用API​​的人准确地弄乱需要指定哪些参数的可能性。

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

© www.soinside.com 2019 - 2024. All rights reserved.