来自负载的 Mulesoft HTTP 请求路径
Mule Soft HTTP Request Path from payload
我创建了简单的流程,我在 url 中发送 id,如下所示:
路径:
/api/courses/find/{id}
结果:
http://localhost:88/api/courses/find/60ee9678070e104b2c57be46
然后我将这个 id 部分设置为 payload。我接下来要做的是调用 REST API 并将此有效负载插入 URL 但无论我尝试什么它都不 return 正确 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 请求元素(例如 http://localhost:1234/api/courses/
和方法 POST)或者我必须为每个元素更改它?我想知道,因为我找不到它是否知道它应该根据该流中的 HTTP 请求元素选择流,还是它只选择具有该路径的第一个 /api/courses
.
我的理解是你需要为一个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
我创建了简单的流程,我在 url 中发送 id,如下所示:
路径:
/api/courses/find/{id}
结果:
http://localhost:88/api/courses/find/60ee9678070e104b2c57be46
然后我将这个 id 部分设置为 payload。我接下来要做的是调用 REST API 并将此有效负载插入 URL 但无论我尝试什么它都不 return 正确 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 请求元素(例如 http://localhost:1234/api/courses/
和方法 POST)或者我必须为每个元素更改它?我想知道,因为我找不到它是否知道它应该根据该流中的 HTTP 请求元素选择流,还是它只选择具有该路径的第一个 /api/courses
.
我的理解是你需要为一个HTTP请求设置一个URI参数。请在下面找到一个流程示例,它使用字段 id
设置有效负载,然后使用该字段的值设置 URI 参数。 URI 参数在花括号 ({}
).
<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