spring integration dsl http outboundgateway

时间:2016-10-25 19:29:32

标签: spring spring-integration dsl

我们正在尝试使用DSL使用HTTP OutboundGateway来调用REST API。我们可以使用GET和POST进行调用,并按预期获得响应。但是,在使用DSL进行此调用时,我们无法想办法传递http标头。有很多关于XML方法的文章,但无法找到DSL的文档

return IntegrationFlows.from("FileContentChannel")
                     .handle(Http.outboundGateway("http://host:port/paymentinfo/")
                             .charset("UTF-8")
                             .httpMethod(HttpMethod.GET)
                             .mappedRequestHeaders("pay*")
                             .headerMapper(headerMapper())
                             .expectedResponseType(String.class))
                  .channel(MessageChannels.queue("APIResponseChannel"))
                     .get();

@Bean
    HeaderMapper headerMapper() {
        DefaultHttpHeaderMapper headerMapper = new DefaultHttpHeaderMapper();
        String[] headerNames = {"payment-hdr1","payment-hdr2"};
        headerMapper.setOutboundHeaderNames(headerNames);

        headerMapper.setUserDefinedHeaderPrefix("");
        return headerMapper;
    }

我们尝试使用DefaultHttpHeaderMapper,但它没有用。你能指导我们吗?

感谢Gary ..这对我有用 的 UPDATE1

package main

import (
    "fmt"
)

type Circle struct{}

func (c Circle) Something() {
    fmt.Println("something")
}

type Rectangle struct {
    Circle
}

func (a Rectangle) SomethingElse() {
    fmt.Println("SomethingElse")
}

type Form Rectangle

func main() {
    c := Form{}
    c.Circle.Something()
    c.SomethingElse()
}

1 个答案:

答案 0 :(得分:1)

/******/ (function(modules) { // webpackBootstrap
/******/    // The module cache
/******/    var installedModules = {};

/******/    // The require function
/******/    function __webpack_require__(moduleId) {

/******/        // Check if module is in cache
/******/        if(installedModules[moduleId])
/******/            return installedModules[moduleId].exports;

/******/        // Create a new module (and put it into the cache)
/******/        var module = installedModules[moduleId] = {
/******/            exports: {},
/******/            id: moduleId,
/******/            loaded: false
/******/        };

/******/        // Execute the module function
/******/        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/        // Flag the module as loaded
/******/        module.loaded = true;

/******/        // Return the exports of the module
/******/        return module.exports;
/******/    }


/******/    // expose the modules object (__webpack_modules__)
/******/    __webpack_require__.m = modules;

/******/    // expose the module cache
/******/    __webpack_require__.c = installedModules;

/******/    // __webpack_public_path__
/******/    __webpack_require__.p = "";

/******/    // Load entry module and return exports
/******/    return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports) {

    import { thing } from './thing';
    console.log(thing.foo);

/***/ }
/******/ ]);

自定义标头将(当前)获得return IntegrationFlows.from("FileContentChannel") .enrichHeaders(h -> h.header("foo1", "bar") .header("foo2", "baz")) .handle(Http.outboundGateway("http://host:port/paymentinfo/") .charset("UTF-8") .httpMethod(HttpMethod.GET) .mappedRequestHeaders("foo*") .expectedResponseType(String.class)) .channel(MessageChannels.queue("APIResponseChannel")) .get(); 前缀。

为避免这种情况,请使用自定义的X-来映射所需的标题模式,并使用DefaultHeaderMapper userDefinedHeaderPrefix