Spring integration 使用XML和JSON的Spring集成REST服务

Spring integration 使用XML和JSON的Spring集成REST服务,spring-integration,Spring Integration,我想用Spring Integration v4.2+实现以下简单用例: 例如,向客户端提供REST端点(/api/person) 客户端可以将数据发布到此端点。数据可以JSON、XML或Google协议缓冲区格式提交 应用程序接受数据并将其保存到数据库表中 我有以下Spring集成配置,允许端点接受JSON数据: <int:channel id="receiveChannel"/> <http:inbound-channel-adapter id="restInputAda

我想用Spring Integration v4.2+实现以下简单用例:

  • 例如,向客户端提供REST端点(
    /api/person
  • 客户端可以
    数据发布到此端点。数据可以JSON、XML或Google协议缓冲区格式提交
  • 应用程序接受数据并将其保存到数据库表中
  • 我有以下Spring集成配置,允许端点接受JSON数据:

    <int:channel id="receiveChannel"/>
    
    <http:inbound-channel-adapter id="restInputAdapter"
                                channel="receiveChannel"
                                path="/api/person"
                                request-payload-type="java.util.Map"
                                supported-methods="POST"/>
    
    <jdbc:outbound-channel-adapter id="jdbcOutputAdapter"
                                 channel="receiveChannel"
                                 data-source="dataSource"
                                 query='INSERT INTO "person" ("first_name", "last_name", "email_address") VALUES (:payload[firstName], :payload[lastName], :payload[email])'/>
    
    我尝试将
    消息转换器
    属性与
    http:inbound channel adapter
    一起使用,明确指定Jackson、JAXB和Protocol Buffers转换器,但这也没有帮助

    我知道如何在带有
    @RestController
    s的定制Spring MVC应用程序中实现这一点,因此我不寻求Spring集成之外的解决方案


    如何调整上面的Spring集成配置,使REST端点可以同时接受JSON、XML和Google协议缓冲区?

    看起来,尽管JSON转换为
    java.util.Map
    ,但XML没有。这就是我们看到错误的原因

    我创建了一个类:

    @XmlRootElement class Person { ... }
    
    然后按如下方式修改配置(仅显示更改):

    
    
    现在,我可以将XML和JSON数据发布到端点


    Google协议缓冲区支持现在可以使用添加。

    看起来,尽管JSON转换为
    java.util.Map
    ,但XML没有。这就是我们看到错误的原因

    我创建了一个类:

    @XmlRootElement class Person { ... }
    
    然后按如下方式修改配置(仅显示更改):

    
    
    现在,我可以将XML和JSON数据发布到端点

    现在可以使用添加Google协议缓冲区支持

    <http:inbound-channel-adapter ...
                            request-payload-type="Person"
                            .../>
    
    <jdbc:outbound-channel-adapter ...
                             query='INSERT INTO "person" ("first_name", "last_name", "email_address") VALUES (:payload.firstName, :payload.lastName, :payload.email)'
                            .../>