Rest 骡子休息APIKit-我的流量不是';我不回一个乱七八糟的尸体

Rest 骡子休息APIKit-我的流量不是';我不回一个乱七八糟的尸体,rest,mule,synchronous,Rest,Mule,Synchronous,**多亏了neildo,问题解决了。以下是从帖子中获得回复所需的步骤 RAML文件必须具有响应体定义 HTTP端点必须设置为请求-响应 使用同步处理策略的所有流 在请求中接受并将内容类型HTTP头设置为application/json ** 我的REST流的实现调用一个Java API,该API返回一个Java对象。然后,我将该对象转换为JSON文档并将其返回给客户端。我的日志记录步骤是记录正确的数据,但是客户端只有一个200 OK的空主体 我已将所有流设置为同步,将HTTP端点设置为请求-响应

**多亏了neildo,问题解决了。以下是从帖子中获得回复所需的步骤

  • RAML文件必须具有响应体定义
  • HTTP端点必须设置为请求-响应
  • 使用同步处理策略的所有流
  • 在请求中接受并将内容类型HTTP头设置为application/json **
  • 我的REST流的实现调用一个Java API,该API返回一个Java对象。然后,我将该对象转换为JSON文档并将其返回给客户端。我的日志记录步骤是记录正确的数据,但是客户端只有一个200 OK的空主体

    我已将所有流设置为同步,将HTTP端点设置为请求-响应。我错过了什么

    谢谢大家!! 内森

    这是我的XML文件

    <apikit:config name="IAMPerson-config" raml="IAMPerson.raml" consoleEnabled="true" consolePath="console" doc:name="Router"/>
    <apikit:mapping-exception-strategy name="IAMPerson-apiKitGlobalExceptionMapping">
        <apikit:mapping statusCode="404">
            <apikit:exception value="org.mule.module.apikit.exception.NotFoundException" />
            <set-property propertyName="Content-Type" value="application/json" />
            <set-payload value="{ &quot;message&quot;: &quot;Resource not found&quot; }" />
        </apikit:mapping>
        ...
    </apikit:mapping-exception-strategy>
    <flow name="IAMPerson-main" doc:name="IAMPerson-main" processingStrategy="synchronous">
        <http:inbound-endpoint address="http://localhost:8081/api" doc:name="HTTP" exchange-pattern="request-response" password="admin" user="admin" contentType="application/json"/>
        <apikit:router config-ref="IAMPerson-config" doc:name="APIkit Router"/>
        <exception-strategy ref="IAMPerson-apiKitGlobalExceptionMapping" doc:name="Reference Exception Strategy"/>
    </flow>    
    <flow name="post:/person:IAMPerson-config" doc:name="post:/person:IAMPerson-config" processingStrategy="synchronous">                                   
        <json:json-to-object-transformer doc:name="JSON to Object" returnClass="PersonDTO"/>
        <invoke name="invokeCreate" object-ref="personService" method="create" methodArguments="#[payload]"></invoke>
        <json:object-to-json-transformer sourceClass="Person" doc:name="Person Object to JSON"/>
        <logger level="INFO" doc:name="Logger" message="#[payload]"/>
    </flow>
    <flow name="put:/person:IAMPerson-config" doc:name="put:/person:IAMPerson-config" processingStrategy="synchronous">           
        <logger level="INFO" doc:name="Logger" message="#[payload]"/>                                
        <json:json-to-object-transformer doc:name="JSON to Object" returnClass="PersonDTO"/>
        <invoke name="invokeUpdate" object-ref="personService" method="update" methodArguments="#[payload]"/>
        <json:object-to-json-transformer sourceClass="Person" doc:name="Person Object to JSON"/>
        <logger level="INFO" doc:name="Logger" message="#[payload]"/>
    </flow>     
    

    在raml文件中,确保资源方法将响应体映射为application/json。例如

    /person:
      post: 
        responses:
          200:
            body:
              application/json:
    
    我也有同样的问题(使用3.5.0版),但是有一个GET请求。建议的解决方案(无论是编辑问题顶部的第1项到第4项,还是检查答案)都没有为我解决问题。(在我的案例中,大多数都是正确的。)

    对我来说,有效的方法是在有问题的GET流的XML底部添加以下内容:

    <response>
        <set-property propertyName="Content-Type" value="application/json"/>
    </response>
    
    
    
    不幸的是,使用可视化编辑器(在“消息流”选项卡中)似乎无法做到这一点。我不得不在“配置XML”选项卡中手动执行此操作


    此外,在主流程(调用APIKit路由器的流程)中插入上述元素(出于某种原因必须在
    元素之前执行)并不能解决问题。然而,在这种情况下,响应元素确实会显示在可视化编辑器中。

    在我意识到这是如何造成的之前,我已经看了15遍这个页面。我添加了一个转换器来进行身份验证。我自定义了
    onCall
    方法,但将
    transformMessage
    作为默认值,设置为200并返回
    null


    瞧,将
    return null
    更改为
    return message
    使一切都恢复正常。

    对RAML文件中的200个状态代码使用这种响应格式。 响应: 200: 正文:
    application/json:

    请提供一些代码来查看您在做什么Hi David,不只是PUT和POST。这两个操作的响应状态代码不是204吗?如果是这样的话,那么我认为这是一个特性,而不是一个bug。对于POST,位置头应该指向新的资源URI,而对于PUT,您已经知道位置。对于成功的POST和PUT,我将获得200状态码。对象的主键由表生成。REST实现中调用的Java(JPA)层返回带有PK的Person(以及相关对象的集合)对象。我正在尝试将该数据返回到客户端。与此方法调用类似:Person p=svc.create(personDTO);谢谢你的回复。事实上,我上周试过了,我得到了Mule返回的空指针。我刚刚更新了我的帖子。你是使用APIKit控制台还是自己的客户端来调用Mule?可能您没有设置请求头“content-type:application/json”和“Accept:application/json”。Accept:application/json做到了这一点。我正在设置内容类型,但没有设置接受。顺便说一句,我正在使用谷歌的免费REST客户端,因为Mule控制台应用程序突然停止工作。当我加载网页时,我只看到HTML,而不是我可以使用的实际UI。很奇怪。您是否愿意将您的评论作为官方答案发布,以便我能给予您信任?我将用解决方案更新我的帖子。谢谢你,感谢所有的回答!没关系,我可以把这篇文章归功于你。再次感谢!要修复控制台,您应该从http:inbound端点删除contentType=“application/json”。您不需要它,因为apikit会根据需要为您设置它。这会导致控制台的html/js/css使用content-type=json,这会导致浏览器呈现错误。
    <response>
        <set-property propertyName="Content-Type" value="application/json"/>
    </response>