微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Wiremock响应中编码特殊字符

如何解决在Wiremock响应中编码特殊字符

我正面临一种情况,其中字符“ ...”偶尔从我的okhttp请求中返回,并且该字符引起了一些下游问题。因此,我添加代码删除该字符(如果存在),我想添加一个测试用例以确保其正常工作。问题在于,wiremock似乎不喜欢这个特殊字符。

通常我会这样从响应中提取数据:

           String stringifiedResponse = response.getResponseString();

        if (response.isSuccessful()) {

            custResp = response.getData();

通常,这对于我的所有请求都可以正常工作。但是,当我设置wiremock来返回带有特殊字符的响应(即使是一个字符,并且我想用许多不同的字段进行测试)时,字符串化的响应的确具有响应,但数据为空。

这就是我在测试类中设置模拟的方法

    public static void mockCPInvalidChars(String ssn) {

    String customerPrefillPrimaryOwnerRequest = " {\n" +
            "  \"customers\": [\n" +
            "    {\n" +
            "      \"partyId\": \"" + ssn + "\",\n" +
            "      \"idType\": \"LID\"\n" +
            "    }\n" +
            "  ]\n" +
            "}";

    String partyId =
            ssn.substring(0,3) + "-"
                    + ssn.substring(3,5) + "-"
                    + ssn.substring(5,9);

    String customerPrefillPrimaryOwnerResponse = "{\"totalRecords\":1,\"customers\":[{\"partyId\":\"" + partyId + "\",\"idType\":\"LID\",\"sourceCode\":\"ICS\",\"firstName\":\"R�EEVES\",\"lastName\":\"WI�CKLIFF\",\"address1\":\"59 Ma�iling LANE\",\"address2\":\"ma�l2\",\"address3\":\"mail�3\",\"address4\":\"mai�l4\",\"city\":\"Mai�l\",\"state\":\"M�A\",\"zipCode\":\"010�10\",\"primaryPhone\":\"817504�0350\",\"alternatePhone\":\"81750�40351\",\"birthDate\":\"1902-0�2-10\",\"foreignIndicator\":\"N\",\"alternateAddress1\":\"88 LEG�AL LANE\",\"alternateAddress2\":\"leg�al2\",\"alternateAddress3\":\"lega�l3\",\"alternateAddress4\":\"lega�l4\",\"alternateCity\":\"LEG�AL\",\"alternateZipCode\":\"020�20\",\"alternateState\":\"L�A\",\"alternateForeignIndicator\":\"N\",\"mailTo\":\"\",\"alternateMailTo\":\"\",\"institutionId\":\"N\",\"taxId\":\"" + ssn + "\",\"taxIdissuer\":\"S\"}]}";

    stubFor(post(urlEqualTo("/my/url"))
            .withRequestBody(equalToJson(customerPrefillPrimaryOwnerRequest))
            .withHeader("Authorization",equalTo("Bearer " + OauthService.getoauthToken().orElse(new OauthToken()).getAccess_token()))
            .willReturn(aResponse()
                    .withStatus(200)
                    .withHeader("Content-Type","text/xml")
                    .withHeader("Content-Length",String.valueOf(customerPrefillPrimaryOwnerResponse.length()))
                    .withBody(customerPrefillPrimaryOwnerResponse)));
}

解决方法

您的问题来自未转义替换字符。

。转换为\uFFFD,但是您还需要转义转义字符(傻傻的JSON),所以它变成\\uFFFD或在另一个字符串"na\\uFFFDthan"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。