有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从Mule 4中的文件中读取JSON字符串

我试图创建一个MUnit测试,通过将有效负载设置为我保存在文件中的JSON对象来模拟HTTP请求。在Mule 3中,我只需要做^{,效果很好。但是在Mule 4中,我不能静态地调用getResource

我发现一个forum post on the Mulesoft forums建议我使用MunitTools::getResourceAsString。当我运行测试时,我确实看到了JSON对象,但它包含所有的\n\r字符,以及一个转义所有引号的\。显然,这意味着我的JSON格式不再正确

理想情况下,我希望能找到MunitTools的参考,这样我就可以看到我可以调用的函数列表,也许还能找到一个不添加转义字符的函数,但我运气不好。如果有人知道我可以参考的参考文件,请告诉我

由于无法找到一种没有额外字符的返回数据的方法,我尝试通过dataweave替换它们。当替换\n\r时,这很好,但因为在每个双引号前面还有更多的\,我似乎无法让它们消失

如果我这么做

replace (/\/) with ("")

。。。我犯了个错误。一位同事建议将每个\"作为目标,并用"替换它们,但这是一个问题,因为这给了我"""。为了绕开这件事,我试过

replace(/\"/) with "\""

。。。它不会导致任何错误,但出于某种原因,它会将\作为一个文本来读取,因此它会用自身替换原始字符串。我也试过。。。 将(/\“/)替换为“'” ...但这也会导致一个错误

我也愿意接受任何其他解决方案

谢谢

--德鲁


共 (2) 个答案

  1. # 1 楼答案

    我也有同样的担忧,所以我开始使用readUrl()方法。这是一种数据编织方法,因此您应该能够在任何MUnit处理器中使用它。下面是我如何在set事件处理器中使用它的一个示例。它读取JSON文件,然后根据我自己的需要将其转换为Java,但您可以根据自己的需要将Java替换为JSON

    <munit:set-event doc:name="Set Event" doc:id="e7b1da19-f746-4964-a7ae-c23aedce5e6f" >
            <munit:payload mediaType="application/java" value="#[output application/java  - readUrl('classpath://singleItemRequest.json','application/json')]"/>
    </munit:set-event>
    

    以下是readUrlhttps://docs.mulesoft.com/mule-runtime/4.2/dw-core-functions-readurl的文档

    希望有帮助

  2. # 2 楼答案

    遵循以下片段(更具体地说是munit-tools:then-return标记):

    <munit-tools:mock-when doc:name="Mock GET /users" doc:id="89c8b7fb-1e94-446f-b9a0-ef7840333328" processor="http:request" >
        <munit-tools:with-attributes >
            <munit-tools:with-attribute attributeName="doc:name" whereValue="GET /users" />
        </munit-tools:with-attributes>
        <munit-tools:then-return>
            <munit-tools:payload value="#[read(MunitTools::getResourceAsString('examples/responses/anypoint-get-users-response.json'), &quot;application/json&quot;)]" />
        </munit-tools:then-return>
    </munit-tools:mock-when>
    

    它模拟HTTP请求,并使用read()函数返回JSON对象