【问题标题】:JAVA EE Rest conditional GET methods on QueryParamsQueryParams 上的 JAVA EE Rest 条件 GET 方法
【发布时间】:2015-04-08 11:23:49
【问题描述】:

我想在我的 Rest 资源类上有两个 GET 方法。 如果查询参数有value1,第二个是value2,一个人会做出反应

让我们说:

@Path("/myApi")
public class MyApiService {

     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response methodOne(...) {
         ...
         return ...;
     }

     @GET
     @Produces(MediaType.APPLICATION_JSON)
     public Response methodTwo(...) {
         ...
         return ...;   
     }

如何实现查询参数的条件路由

如果QueryParam?type=onemethodTwo() 如果QueryParam?type=two,我想methodOne() 做出反应

【问题讨论】:

  • 您能告诉我们为什么您认为这是必要的吗?
  • 一种选择是使用Sub-Resource Locators
  • @Tichodroma 我想将方法​​分开,因此例如在 swagger 中,您可以看到更多方法。我认为每个不同查询参数的方法并不像看起来那么愚蠢......

标签: java rest get query-parameters


【解决方案1】:

选择基于QueryParam 的servlet 处理程序不是一个好方法,默认情况下没有库可以让您有机会这样做。 想到的最接近的是PathParam,类似于Path("\api\{param1}\{param2}"),但这不是您要找的。​​p>

实现你想要的只是

  • 将这些方法注销为 servlet 处理程序(可选,如果您在查询参数选择范围之外不需要它们)
  • 定义一个新的,将根据query param 选择

@GET @Produces(MediaType.APPLICATION_JSON)

public Response methodThree(QueryParam('type') String type) {
return type.equals("type1") ? this.methodOne() : this.methodTwo();   
}

【讨论】:

  • 这是我认为的选项,我认为这是唯一的选项:(
【解决方案2】:

对于同一路径,您不能有两个具有相同参数的方法。 它不漂亮,但它会工作..

@GET
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod(@QueryParam("type") String type){

 if(type.equals("one"))
     return methodOne();
 else
     return methodTwo();
}

【讨论】:

    猜你喜欢
    • 2017-12-02
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多