【问题标题】:RestEasy @Path Question with regular expression带有正则表达式的 RestEasy @Path 问题
【发布时间】:2023-03-07 08:37:01
【问题描述】:

是否可以使用可选的路径变量来定义路径。

喜欢下面的 uri:

/app/make/{make}/model/{model}/year/{year}/mileage/{mileage}/fuelType/{fuelType}/maxPrice/{maxprice}/transmission/{transmission}/engineSize/ {engineSize}

URI可以由任意0个或多个参数组合组成吗?有没有办法告诉 resteasy 所有这些路径都是可选的?

干杯。

【问题讨论】:

    标签: java regex rest uri resteasy


    【解决方案1】:

    为什么要使用路径段?如果它们是可选参数,那么它就不可能是真正的层次结构,那么为什么不只使用查询字符串参数。对于这种类型的参数,它们的效果要好得多。

    【讨论】:

    • 好吧,需求文档是这么说的,其他硬件也使用相同的 URI 语法,所以我不能只更改它。但是,你是对的,如果它是可选的,它通常应该进入查询字符串参数。
    • @fmu 超媒体约束的要点之一是服务器的 URI 结构应该是私有的实现细节。您有规范定义 URI 应该是什么样子的事实意味着有人计划编写将构建这些 URI 的客户端。那是完全错误的。您现在面临的任务是说服您的服务器框架处理它不喜欢的 URI 结构,这与它的工作方式完全相反。我意识到我在向错误的人发泄,但无论如何感觉都很好:-)
    • 这是一个供 3rd 方应用程序使用的休息应用程序。如果他们不知道 URI,他们将如何使用它?
    • @fmu REST 系统中的客户端只应该从入口点 URL 开始,并通过查看从服务器返回的表示来发现所有其他 URL。网站的工作原理。耦合在媒体类型和链接中的 rel 属性上。
    • 我不认为这样做是最好的。想象一下数百个客户端向服务器发出请求。每次休息服务器需要将所有内容推送到客户端只是为了过滤其中的几个。首先,将所有可能的结果发送给每个人听起来并不正确。第二件事是,如果休息服务器在开始时发送所有内容,那么其余的过滤应该在请求机器上完成,不需要再次将过滤后的内容推送到同一个客户端。如果你明白我的意思
    【解决方案2】:
    @Path("/make/{make}{model:(/model/[^/]+)?}{fuel : (/fuel/[^/]+)?}{gearbox : (/gearbox/[^/]+)?}/cars")
    
    
    
    app/{make:(/make/[^/]+)?}{model:(/model/[^/]+)?}{year:(/year/[^/]+)?}{mileage:(/mileage/[^/]+)?}
    

    我想出了上述解决方法,但在方法内部我需要删除路径名。

    【讨论】:

      猜你喜欢
      • 2016-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 2011-01-25
      相关资源
      最近更新 更多