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

これが私のリクエストURLです。ブラウザに入力したサンプルURLを使用してサービスをテストする必要があります。しかし、JSONアイテムの多くはサーバー側で受け入れられないようです。プレーンテキスト文字列を入力すると、サーバーは正常に動作します。http://www.albionresearch.com/misc/urlencode.phpを使用してURLをエンコードしようとしましたが、それでもエラーが発生します。

これはタペストリーに属する問題かもしれません。それ以外の場合は、助けが必要です。

次のリクエストが機能します。

 http://localhost/catalog/helloworld
4

2 に答える 2

1

タペストリーは、URL内で独自のパラメーターのエンコードを実行しますが、クライアント側にはレプリカがありません。

org.apache.tapestry5.internal.services.URLEncoderImpl.encode(String)を参照してください

「helloworld」が期待どおりに機能する理由は、「特殊文字」がないため、エスケープされた値は「helloworld」と等しくなるためです。

したがって、タペストリーを使用して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文字列をデコードする必要があります。

より良い解決策は、ある種のテストツールを使用することかもしれません。これは、Webページでのjquery $ .getリクエストのように単純な場合もあれば、この投稿で提案されているように、より用途の広いHTTPクライアントについて考えたい場合もあります。

于 2012-10-26T13:41:39.310 に答える