mule应用——消息格式转换(xml,java,json)

消息转换主要用到Transform Message这个组件,首先建立一个简单的post请求API,如下图:

要得到不同格式的数据返回格式,主要在Transform Message配置,下图:

1,得到java格式:

debug模式下请求接口查看转换效果:

2.得到json格式:

3.转换为xml格式:

这个就有点厉害了,直接改application/xml后请求时报错的,原因是要设置一个顶级节点,所以payload输出设置如下:

再次测试请求得到的结果是这样的:

最后,xml标签中还可以设置属性,要在转换的时候设置属性需要借助@(),示例如下:
下面的写法是把payload.code的值放在<data>中的code属性中

测试请求数据和结果如下:

可以看到《data》中多了code属性

然后,如果输入数据是xml,要取xml标签里的属性值的话,需要用@,示例如下

上面的写法,就是把<data>标签里面的code属性取出来,注意其他属性也要根据xml标签结构取(比如price在data下一级)请求参数和转换结果如下:

在转换格式的时候可能还需要过滤一些条件或者加一些判断,表达式有几种写法:

上面的表达式代表:当price不等于“199”的时候取原属性的值,否则price的值为111

上面的表达式代表:如果没有price属性,默认属性值为111

还有可能要用到数据类型的转换,比如int转string,string转日期,上图:

上面price转为string类型,后面那个字段先转为date类型,再转成希望得到的string格式,请求和返回结果如下:

替换指定的数据内容:

上面的写法把/()/中的数据替换为with后面的值,即“request”替换为“response”,请求和返回结果如下:

在集合数据返回时还可能用到过滤条件,排序:

上面的写法是把数据以date和price排序,并且排除seats为0的数据对象

 

还可以事先定义转换规则或类型,然后直接引用:

上面的写法定义了一个flights的实体bean,将转换后的map再转成bean类型,最后的数据是一多个bean组成的数组

 

 

使用payload之外的方法或者引用:

可以把单独的方法封装成expression组件,如图:

上面相当于一个方法,可以作为一个flow在outpout中使用表达式引用,传的参数是type,下面是引用的写法:

这样,就等于在设置totalSeats值的时候引用了上面封装好的getTotalSeatsFlow里面的表达式对数据做处理,{type:$.palntype}表示把planetype作为type参数传过去。