【问题标题】:Mule Soft HTTP Request Path from payload来自负载的 Mulesoft HTTP 请求路径
【发布时间】:2022-01-22 18:26:32
【问题描述】:

我创建了简单的流程,我在 url 中发送 id,如下所示:

路径:

/api/courses/find/{id}

结果:

 http://localhost:88/api/courses/find/60ee9678070e104b2c57be46

然后我将此 id 部分设置为有效负载。我接下来要做的是调用 REST API,将此有效负载插入 URL,但无论我尝试什么,它都不会返回正确的 JSON。

这是我需要的样子:

路径:

http://localhost:1234/api/courses/find/60ee9678070e104b2c57be46

转换消息的结果:

%dw 2.0
output application/json
---
{
    isPublished: payload.isPublished,
    tags: payload.tags map ( tag , indexOfTag ) -> tag,
    "_id": payload."_id",
    dishName: payload.dishName,
    category: payload.category,
    author: payload.author,
    ingredients: payload.ingredients map ( ingredient , indexOfIngredient ) -> {
        "_id": ingredient."_id",
        quantity: ingredient.quantity,
        unit: ingredient.unit,
        description: ingredient.description
    },
    cookingTime: payload.cookingTime,
    sourceUrl: payload.sourceUrl,
    imageUrl: payload.imageUrl,
    price: payload.price,
    date: payload.date,
    "__v": payload."__v",
    id: payload."_id"
}

我尝试通过将 id 放入 URI 参数来做到这一点,但它是 URL 的一部分而不是 URI 参数,因此不起作用,类似这样的事情也是如此:

HTTP 请求的请求路径:

/api/courses/find/#[payload]

有谁知道我是否可以像这样在 URL 中插入有效负载?我在文档中找不到任何关于它的信息。

感谢您的帮助!

编辑:您能否告诉我,如果我想为每个方法 GET、POST、PUT、DELETE 创建路径,它是否具有相同的侦听器路径 /api/courses 并且仅在不同的 HTTP 请求元素之后(例如 @987654327 @ 使用 POST 方法)还是我必须为每一个都更改它?我想知道,因为我找不到它是否会知道它应该根据此流中的 HTTP 请求元素选择流,或者它只是选择具有该路径 /api/courses 的第一个。

【问题讨论】:

  • 请将HTTP请求操作和配置添加为XML。
  • 关于在“EDIT:”之后添加的问题,它看起来是一个新的独立问题。请为它发布一个单独的问题。
  • “我试图通过将 id 放入 URI 参数来做到这一点,但它是 URL 的一部分而不是 URI 参数” URI 参数作为 URL 的一部分传递。您指的是查询参数吗?

标签: mule mulesoft anypoint-studio


【解决方案1】:

我的理解是你需要为一个HTTP请求设置一个URI参数。请在下面找到一个流程示例,该流程使用字段 id 设置有效负载,然后使用该字段的值设置 URI 参数。 URI 参数设置在用大括号 ({}) 括起来的 HTTP 请求的路径属性中。

    <flow name="testUriParamsFlow" >
        <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/"/>
        <ee:transform doc:name="Transform Message">
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
                    output application/java
                    ---
                    {
                        id: "123456"
                    }]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
        <http:request method="GET" path="/api/courses/find/{id}" config-ref="HTTP_Request_configuration" doc:name="Request">
            <http:uri-params ><![CDATA[#[output application/java
                ---
                {
                    id : payload.id
                }]]]>
            </http:uri-params>
        </http:request>
    </flow>

使用HTTP Wire logging我们可以确认请求将URI参数替换为URI的一部分:

GET /api/courses/find/123456 HTTP/1.1

【讨论】:

  • 对不起,你误会了。我想要做的是在路径中有一个变量(类似于/api/courses/find/#[variable from payload]),但是当我在那里放置一个变量时,即使记录器输出正确的变量值(它在控制台中显示正确的 id)它也不起作用。我要问的是我现在如何将这个变量(id)从有效负载放到路径中,以便 HTTP 请求我有来自 API 的针对这个特定 id 的输出数据。例如,当我在 Path 中放置 http://localhost:1234/api/courses/find/60ee9678070e104b2c57be46 时,它会从 API 返回正确的 JSON。
  • 我想我展示了如何将变量部分添加到请求路径中。您需要提供更多详细信息来澄清问题。什么不完全有效?添加错误或意外值。清楚地显示变量值,以及如何生成请求。请参阅我共享的 HTTP Wire Logging 链接以启用它并查看请求/响应。还要展示你在流程中做了什么。这将为您尝试做的事情提供一些背景信息。想想我们如何重现这个问题。我们需要所有细节。阅读stackoverflow.com/help/how-to-ask,了解如何改进您的问题。
  • 谢谢你,你是对的。你真的帮了我很多,所以你有我永远的感激之情?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多