1
http://localhost/catalog/{"request": "catalog","user_id": "test@gmail.com","purchased": "2"}

这是我的请求网址。我需要使用在浏览器中输入的示例 URL 来测试我的服务。但似乎服务器端不接受许多 JSON 项。如果我输入平面文本字符串服务器工作正常。我尝试使用http://www.albionresearch.com/misc/urlencode.php对 URL 进行编码,但仍然存在错误。

可能这是属于挂毯的问题。否则我想得到一些帮助。

以下请求有效。

 http://localhost/catalog/helloworld
4

2 回答 2

1

Tapestry 在 url 中执行自己的参数编码,在客户端没有副本。

org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)

“helloworld”按预期工作的原因是没有“特殊字符”,所以转义值无论如何都等于“helloworld”。

因此,您要么需要使用 Tapestry 通过 java 对 json 进行编码,要么需要URLEncoder编写客户端副本。

也就是说,如果我正确理解你的问题。

编辑我很无聊,所以我写了客户端副本:

/**
 * see org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)
 * correct as at tapestry 5.3.5
 */
function tapestryUrlEncodeParameter(input)
{
    var safe = "abcdefghijklmnopqrstuvwxyz"
            + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
            + "01234567890-_.:";

    if (input === null)
        return "$N";

    input = input.toString();

    if (input === "")
        return "$B";

    var output = "";

    for (var i = 0; i < input.length; i++)
    {
        var ch = input.charAt(i);

        if (ch === '$')
        {
            output += "$$";
            continue;
        }

        if (safe.indexOf(ch) != -1)
        {
            output += ch;
            continue;
        }

        var chHex = ch.charCodeAt(0).toString(16);
        while (chHex.length < 4)
            chHex = "0" + chHex;
        output += "$" + chHex;
    }

    return output;
}
于 2012-10-26T22:54:54.123 回答
0

你有什么服务器端?无论哪种方式,如果你想这样做,你都必须在服务器端解码你编码的 json 字符串。

更好的解决方案可能是使用某种测试工具。这可以像网页中的 jquery $.get 请求一样简单,或者您可能想考虑一个更通用的 HTTP 客户端,如本文中所建议的那样

于 2012-10-26T13:41:39.310 回答