如何防止Mule向HTTP响应添加默认内容类型?
目前,Mule 正在添加"文本/纯文本"内容类型。我的 REST 调用并不总是指定预期内容,而服务并不总是指示服务的内容 - 将其留给客户端(浏览器)进行解释。
我的"代理"流如下所示:
<flow name="DragonScalaProxy" doc:name="DragonScalaProxy">
<http:inbound-endpoint address="http://localhost:8002" exchange-pattern="request-response" doc:name="HTTP" disableTransportTransformer="true"/>
<logger level="INFO" doc:name="Logger"/>
<copy-properties propertyName="http.method" doc:name="Copy HTTP Method"/>
<message-properties-transformer doc:name="Message Properties">
<delete-message-property key="Content-Type"/>
</message-properties-transformer>
<http:outbound-endpoint address="http://localhost:8000#[header:INBOUND:http.request]" exchange-pattern="request-response" doc:name="HTTP" disableTransportTransformer="true"/>
<remove-property propertyName="Content-Type" doc:name="Remove Content-Type"/>
<message-properties-transformer doc:name="Message Properties">
<delete-message-property key="Content-Type"/>
</message-properties-transformer>
<logger level="INFO" doc:name="Logger"/>
您可以使用转换器将其设置为所需的任何内容。例如,对于 xml 类型:
<message-properties-transformer name="contentTypeTextXML">
<add-message-property key="Content-Type" value="text/xml" />
</message-properties-transformer>
或者您可以使用删除消息属性处理器将其删除
我有一个类似的问题;每当我将Mule消息的有效负载转换为JSON时,Mule运行时都会自动将Mule消息的MIME类型设置为application/json。 当 http:request 组件看到 MIME 类型的应用程序/json 时,它也会将 HTTP 请求的内容类型设置为 application/json。 不幸的是,我需要调用的 RESTful 服务只识别了 text/x-json 的内容类型。当骡子消息的 MIME 类型设置为应用程序/json 时,我无法手动覆盖 http:request 使用的内容类型;它只是忽略了内容类型的 http:header 设置。 我通过添加一个表达式组件来解决这个难题,以覆盖Mule消息的SimpleDataType中设置的MIME类型,然后我终于能够成功地将http:request组件中的内容类型覆盖为我需要的类型,如下所示:
...
<expression-component doc:name="Override default DataType"><!CDATA[
message.getDataType().setMimeType('*/*');
]]></expression-component>
<http:request config-ref="HTTP_Request_Configuration" path="search.do" method="POST" doc:name="Call RESTful service to perform search">
<http:request-builder>
...
<http:header headerName="content-type" value="text/x-json"/>
...
</http:request-builder>
</http:request>
...