Java Spring集成-如何以编程方式使用uri参数/url表达式?
我必须为以下步骤编写Spring集成流: (1) 从目录中读取json文件 (2) 转换为Java对象并添加标题 (3) 转换为JSON (4) Post到终点:Post (5) 提取对名为“UserValidationResponse”的Java对象的响应。响应有一个名为orderID的字段,将在步骤7中使用 (6) 将输出写入名为“userValidationPostOutputWriterChannel”的通道。此通道将记录Http状态 (7) 放置在端点上:放置{orderID在步骤5中提取}/取消 (8) 将输出写入名为“UserValidationPostCancelOutWriterChannel”的通道。此通道将记录Http状态 我需要什么:Java Spring集成-如何以编程方式使用uri参数/url表达式?,java,spring-integration,uri,Java,Spring Integration,Uri,我必须为以下步骤编写Spring集成流: (1) 从目录中读取json文件 (2) 转换为Java对象并添加标题 (3) 转换为JSON (4) Post到终点:Post (5) 提取对名为“UserValidationResponse”的Java对象的响应。响应有一个名为orderID的字段,将在步骤7中使用 (6) 将输出写入名为“userValidationPostOutputWriterChannel”的通道。此通道将记录Http状态 (7) 放置在端点上:放置{orderID在步骤5中
{
"status": "CREATED",
"orderID": "78e323f7-d3f9-11e9-a71a-035a2a38a4e0",
"userData" : {
"userFName": "John",
"userLName": "Smith",
"userLocation": "Florida"
},
"userAccess": "USER"
}
如何动态构造URL{orderID}/cancel?
我在网上查了一下,发现我必须使用一个uri参数
你能以编程的方式给我举个例子吗
我只能找到使用配置XML的示例,代码中没有配置XML
示例代码:
@Bean
public IntegrationFlow placeUserRequest(RestTemplate restTemplate) {
private String AUTHORIZATION = "USER";
return IntegrationFlows.from(sourceDirectory(), configurer -> configurer.poller(Pollers.fixedDelay(10000)))
.transform(Transformers.fromJson(UserRequest.class))
.enrichHeaders(h -> h.header("Content-Type", "application/json"))
.transform(Transformers.toJson())
.handle(Http.outboundGateway("http://127.0.0.1:8081/v1/userValidation", restTemplate)
.httpMethod(HttpMethod.POST)
.mappedRequestHeaders("auth*", "TraceabilityID", AUTHORIZATION)
.charset("UTF-8")
.expectedResponseType(UserValidationResponse.class))
.wireTap(flow -> flow.channel("userValidationPostOutputWriterChannel"))
.handle(Http.outboundGateway("http://127.0.0.1:8081/v1/userValidation/" + parser.parseExpression("payload.getOrderID()") + "/cancel", restTemplate)
.httpMethod(HttpMethod.PUT)
.mappedRequestHeaders("auth*", "TraceabilityID", AUTHORIZATION)
.charset("UTF-8").expectedResponseType(Map.class))
.wireTap(flow -> flow.channel("userValidationPostCancelOutputWriterChannel"))
.get();
}
发帖回复样本:
{
"status": "CREATED",
"orderID": "78e323f7-d3f9-11e9-a71a-035a2a38a4e0",
"userData" : {
"userFName": "John",
"userLName": "Smith",
"userLocation": "Florida"
},
"userAccess": "USER"
}
下一次执行应该是PUT 在HTTP出站网关上配置该URI完全可以:
http://127.0.0.1:8081/v1/userValidation/{orderID}/cancel
.handle(Http.outboundGateway("http://127.0.0.1:8081/v1/userValidation/{orderID}/cancel", restTemplate)
.httpMethod(HttpMethod.PUT)
.mappedRequestHeaders("auth*", "TraceabilityID", AUTHORIZATION)
.charset("UTF-8").expectedResponseType(Map.class)
.uriVariable("orderID", "payload.orderID"))
这称为模板
。这里有一个orderID
uriVariable。Http.outboundGateway也支持此功能:
/**
* Specify a value SpEL expression for the uri template variable.
* @param variable the uri template variable.
* @param expression the expression to evaluate value for te uri template variable.
* @return the current Spec.
* @see AbstractHttpRequestExecutingMessageHandler#setUriVariableExpressions(Map)
*/
public S uriVariable(String variable, String expression) {
因此,对于您的用例,它必须是这样的:
http://127.0.0.1:8081/v1/userValidation/{orderID}/cancel
.handle(Http.outboundGateway("http://127.0.0.1:8081/v1/userValidation/{orderID}/cancel", restTemplate)
.httpMethod(HttpMethod.PUT)
.mappedRequestHeaders("auth*", "TraceabilityID", AUTHORIZATION)
.charset("UTF-8").expectedResponseType(Map.class)
.uriVariable("orderID", "payload.orderID"))
阿尔特姆·比兰/加里·拉塞尔-你能帮忙吗?