首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从有效载荷中获取值的骡子

从有效载荷中获取值的骡子
EN

Stack Overflow用户
提问于 2015-01-16 03:04:56
回答 2查看 4.2K关注 0票数 0
代码语言:javascript
复制
<flow name="datamappingFlow1" doc:name="datamappingFlow1">
    <http:inbound-endpoint exchange-pattern="request-response" host="${hostname}" port="${port}" path="account" connector-ref="ConnectorWithoutMuleSession" doc:name="HTTP"/>
    <jersey:resources doc:name="REST">
        <component class="com.mycompany.qb.rest.AccountMappingService"/>
    </jersey:resources>
    <object-to-byte-array-transformer doc:name="Object to Byte Array"/>       
    <byte-array-to-object-transformer doc:name="Byte Array to Object"/>
    <scatter-gather doc:name="upsert to db">
        <flow-ref name="test1" doc:name="Flow Reference"></flow-ref>
        <flow-ref name="test2" doc:name="Flow Reference"></flow-ref>            
    </scatter-gather>
</flow>
<flow name="test1" doc:name="test1">
    <logger message="====Input deduction data is 1======#[payload]" level="INFO" doc:name="Logger"/>
    <logger message="==== Input test1 data    ======#[message.inboundProperties['City']]" level="INFO" doc:name="Logger"/>
    <db:insert config-ref="Oracle_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[insert into test1(City)values(#[payload.City])]]></db:parameterized-query>
    </db:insert>
</flow>
<flow name="test2" doc:name="test2">
    <logger message="====Input deduction data is 2======#[payload]" level="INFO" doc:name="Logger"/>
    <logger message="==== Input test2 data    ======#[payload.City]" level="INFO" doc:name="Logger"/>
    <db:insert config-ref="Oracle_Configuration" doc:name="Database">
        <db:parameterized-query><![CDATA[insert into test2(City)values(#[payload.City])]]></db:parameterized-query>
    </db:insert>
</flow>

休息部分:

代码语言:javascript
复制
@Path("/")
public class AccountMappingService {  
        @POST
        @Path("/mapping")
        @Produces(MediaType.APPLICATION_JSON)
        @Consumes(MediaType.APPLICATION_JSON)
        public String dataMapping(@Payload String content){
            log.info("Rest Content is==>\n"+content);
            return content;
        }

输入数据:

代码语言:javascript
复制
    {
    "City":"SFO1"
    }

输出:

代码语言:javascript
复制
====Input deduction data is 2======{
"City":"SFO1"
}
    ==== Input test1 data    ======null

====Input deduction data is 1======{
"City":"SFO1"
}
    ==== Input test2 data    ======null

为什么我要在这里获得空值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-16 04:12:45

====输入test1数据======null

来自:

代码语言:javascript
复制
<logger message="==== Input test1 data    ======#[message.inboundProperties['City']]" level="INFO" doc:name="Logger"/>

入站属性由入站端点设置。在您的示例中,您使用的是HTTP入站端点。根据文档

为了保持与以前版本的Mule的向后兼容性,头和查询参数也存储在入站属性上。

因此,除非在发送到流的HTTP请求中传递名为City的header或查询参数,否则#[message.inboundProperties['City']]的计算只能返回null

下列情况:

====输入test2数据======null是不同的。它来自:

代码语言:javascript
复制
<logger message="==== Input test2 data    ======#[payload.City]" level="INFO" doc:name="Logger"/>

这将对无法工作的String类型的有效负载调用String。我推断有效载荷是String类型的,因为:

代码语言:javascript
复制
public String dataMapping(@Payload String content)

如果要从中提取值,则需要将JSON字符串有效负载转换为java.util.Map。从文档中可以看到,您需要添加一个转换器:

代码语言:javascript
复制
<json:json-to-object-transformer returnClass="java.util.Map" />
票数 3
EN

Stack Overflow用户

发布于 2015-08-25 13:48:30

USe Java映射,然后在记录器中使用点操作打印它们,它将工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27976679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档