【问题标题】:Optional parameters in Spring Integration HTTP inbound gateway pathSpring Integration HTTP 入站网关路径中的可选参数
【发布时间】:2015-03-28 01:10:48
【问题描述】:

我正在使用 Spring Integration 来提供一些 REST Web 服务。我的服务的网址类似于

http://myhost/param1_name/param1_value/param2_name/param2_value

当然,我不只有 2 个参数,我希望其中一些是“可选的”。

我找到了以下链接http://www.nakov.com/blog/2009/07/15/jax-rs-path-pathparam-and-optional-parameters/中描述的解决方案

不幸的是,它不适用于 Spring Integration。在 Spring Integration 中,每当我尝试使用正则表达式 [^/] 来处理参数时,这都不起作用。

例如,firstName 永远不会像这样匹配: path="/register/firstName/{firstName:[^/]+}/lastName/"

任何想法,如何使用 Spring Integration 实现可选参数?

【问题讨论】:

    标签: java regex spring spring-integration


    【解决方案1】:

    我已就此事与 Rossen Stoyanchev 讨论过,他发现您最初的方法是错误的。这是他的话:

    路径应该反映 REST 资源的层次结构。编码和内容类型等问题不属于那里。它们是跨领域的,可以应用于任何 URL。试想一个在每个 URL 上都支持/encoding/utf-8/format/pdf 的 REST API。在 Spring MVC 中,我们甚至支持通过查询参数(例如format=pdf)或文件扩展名(.pdf)进行内容协商,作为使用Accept 标头(基于ContentNegotiationStrategy)的替代机制。这是常见的做法,我无法想象为什么有人会考虑将此类信息放入路径变量中。

    他确实有一个firstName 和可选lastName 的示例。我也不认为这是一个好主意。首先,即使不经常更改名称也可以更改。还要考虑一个人可以出现在 REST API 中的所有位置。现在你必须在任何地方都支持firstName 和可选的lastName。例如。 /person/{firstName}/{lastName}/children/{firstName}/{lastName}.

    似乎这两个示例都试图将随机数据放入属于查询参数或请求正文的 URL 路径中。 路径应该反映资源的层次结构

    顺便说一句,引用的文章实际上说 JAX-RS 不支持可选路径变量。他将其描述为 hack。

    因此,如果您可以将这些 optinal 部分移动到请求参数并使用一些通用的 path 来映射它们会更好。或者...@RequestMapping 具有 params 选项以允许将方法映射到 URL,如果它包含或不包含特定参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-27
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多