我想用Spring Integration v4.2 +实现以下简单用例:
/api/person
)。POST
数据到此端点。数据可以用JSON,XML或Google Protocol Buffers格式提交。我有以下Spring Integration配置,允许端点接受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])'/>
这是在类路径上使用Jackson2的Maven项目中,这就是为什么从请求中读取JSON不需要特殊配置。
但是,尝试发布XML数据会导致以下异常:
org.springframework.messaging.MessagingException: Could not convert request: no suitable HttpMessageConverter found for expected type [java.util.Map] and content type [application/xml]]
我尝试将message-converters
属性与http:inbound-channel-adapter
一起使用,明确指定了Jackson,JAXB和Protocol Buffers转换器,但这也无济于事。
我知道如何在带有@RestController
的定制Spring MVC应用程序中执行此操作,因此我不想在Spring Integration之外寻找解决方案。
如何调整上面的Spring Integration配置,以便可以使REST端点同时接受JSON,XML和Google Protocol Buffers?
答案 0 :(得分:0)
虽然JSON转换为java.util.Map
,但似乎并非如此。这就是看到错误的原因。
我创建了一个类:
@XmlRootElement class Person { ... }
然后修改配置如下(仅显示更改):
<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)'
.../>
我现在可以将XML和JSON数据发布到端点。
现在可以使用Protostuff library添加Google协议缓冲区支持。