0

私の問題は、エスケープ文字が私のJSONを無効にしていることです。JSONをRailsサーバーに送信していますが、JSONが到着すると、いくつかのエスケープ文字が取得されます。

レストフルクラスでこれを解決するためにできることはありますか、それともサーバー側で修正する必要がありますか?

これが私が送信しているJSONです。

[session={"password":"********","email":"********@omobile.com.br"}]

サーバーログに表示されるJSONは次のとおりです。

{"session"=>"{\"password\":\"********\",\"email\":\"********@omobile.com.br\"}"}

JSONを送信するためにこれらのさまざまな方法を試しましたが、結果は同じです。

JSONObject object = new JSONObject();
object.accumulate("email", username);
object.accumulate("password", password);
String jsonString = object.toString();

Session session = new Session();
session.setEmail(username);
session.setPassword(password);
Gson gson = new Gson();
String jsonString = gson.toJson(session, Session.class);
4

1 に答える 1

1

投稿した文字列はどちらも実際には JSON ではないため、何が起こるかは混乱です。最初のものは実際には何なのかわかりませんが、2番目のものはRuby側にこのRubyハッシュがあり、キー「セッション」がJSONでエンコードされたハッシュを参照していることを意味する可能性があります。

コードを投稿していないため、ネットワーク上で何が起こっているのかわかりません。そのため、サーバーがフォーム エンコードされたリクエスト ボディ、マルチパート リクエスト ボディ、または直接 JSON エンコードされたオブジェクトを期待しているかどうかはわかりません。

私が目にする JSON は次の部分だけだと考えてください。

{"password": "********","email":"********@omobile.com.br"}

前述したように、これはそのまま渡すことも、マルチパート エンベロープの一部として渡すことも、URL エンコードすることもできます。フォーマットはサーバー上で実際に確立されています。たとえば、Apache HttpClient を使用して簡単なテストを行いました。

public class GsonSendToSinatra {

    private static class Session {
        @SuppressWarnings("unused")
        String username, password;
    }

    public static void main(String[] args) throws Exception {
        Session session = new Session();
        session.username = "foo@example.com";
        session.password = "qwerty1234";

        Gson gson = new Gson();

        String responseText = Request.Post("http://localhost:4567/echo")
            .bodyString(gson.toJson(session), ContentType.APPLICATION_JSON)
            .execute()
            .returnContent()
            .asString();

        System.out.println(responseText);
    }
}

サーバー上のSinatra:

require 'sinatra'
require 'json'

post '/echo' do
  content_type "text/plain"
  layout false

  session = JSON.parse request.body.read

  session.map {|k,v| "#{k}: #{v}\n"}
end

この例が、HTTP ダイアログの可動部分とは何か、それらをどのように組み合わせることができるかを理解するのに役立つことを願っています。

于 2013-03-04T23:36:08.897 に答える