Integración de primavera - Cómo utilizar URI parámetro / url expresión mediante programación?

Deepboy:

Tengo que escribir el flujo de Integración de primavera para el siguiente pasos:

(1) Leer JSON archivos de un directorio

(2) se transforman en objetos de Java y el encabezado complemento

(3) Transformar para JSON

(4) Compartir en punto final: Enviar http://127.0.0.1:8081/v1/userValidation

(5) Extracto de respuesta a un objeto Java llama 'UserValidationResponse'. La respuesta tiene un campo llamado orderID que será utilizado en el paso 7.

(6) de salida de escritura a un canal llamado 'userValidationPostOutputWriterChannel'. Este canal registrará el estado HTTP.

(7) poner en punto final: PUT http://127.0.0.1:8081/v1/userValidation/ {orderID extrajo en el paso 5} / cancelar.

(8) de salida de escritura en un canal llamado 'userValidationPostCancelOutputWriterChannel'. Este canal registrará el estado HTTP.

LO QUE NECESITO:

Cómo construir la URL http://127.0.0.1:8081/v1/userValidation/ {orderID} / cancelar de forma dinámica?

Lo busqué en línea y encontró que tengo que utilizar un parámetro URI.

¿Puede usted por favor, dame un ejemplo mediante programación?

Sólo pude encontrar ejemplos de configuración utilizando XML, y tengo XML NO config en mi código.

CÓDIGO DE MUESTRA:

@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();
}

RESPUESTA muestra a partir de la POST http://127.0.0.1:8081/v1/userValidation :

{
    "status": "CREATED", 
    "orderID": "78e323f7-d3f9-11e9-a71a-035a2a38a4e0",
    "userData" : {
            "userFName": "John",
            "userLName": "Smith",
            "userLocation": "Florida"
        },
    "userAccess": "USER"    
}

La siguiente ejecución debe ser un PUT http://127.0.0.1:8081/v1/userValidation/78e323f7-d3f9-11e9-a71a-035a2a38a4e0/cancel .

Arteta:

Está totalmente bien tener que URI en la puerta de enlace HTTP saliente configurado de esta manera:

 http://127.0.0.1:8081/v1/userValidation/{orderID}/cancel

Esto se llama template. Que tiene allí que orderID uriVariable . El Http.outboundGatewaytiene soporte para que así:

/**
 * 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) {

Por lo tanto, para su caso de uso debe ser algo como esto:

 .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"))

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=336269&siteId=1
Recomendado
Clasificación