2017-12-05 9 views
0

sparkjavaを使用している私のサーバとクライアント(Android)が話していますが、クライアントがレスポンスのボディを解析しようとしているときに実行していますresponse.data Volleyと、それは応答のボディが空であることを得ている。クライアントはJsonRequestObjectを送信しています。応答の本文が空の場合はJSONExceptionがスローされます。ここでSparkjavaがレスポンスボディにデータを入れられない

は、私たちのsparkJavaコントローラです:

public static String doThis(Request request, Response response) { 
     response.type("application/json"); 

     // If the request fails validations, then return a 400 
     if (request.failsValidations()) { 
      response.status(HTTP_BAD_REQUEST); // 400 
      response.header("Error", "Bad request"); 
     } else { 
      response.status(HTTP_SUCCESS); // 200 
      // Put the response into the data 
      String responseData = "{//someJson}" 
      response.header("data", responseData); 
      response.body(data); 
     } 
     return ""; 
    } 

私はヘッダとボディで同じデータを設定するんだけど、私は、クライアント上で受信した応答を見ると、データはヘッダのみであり、体の中ではありません。だから私はSparkのresponse.body()メソッドが実際に返される応答にデータを入れていないと考えていました。 response.bodyがvolarkleyの見方とは違うsparkjavaで表現される方法ですか?あるいは、sparkからレスポンスボディにデータを入れる別の方法がありますか?

答えて

3

次の2つの方法でそれを行うことができます。

  1. public static Object doThis(Request request, Response response) { 
        response.type("application/json"); 
    
        return "{\"data\":\"someData\"}"; 
    } 
    

最初のJSONとしてフォーマットされた文字列を使用してJSONオブジェクト

public static Object doThis(Request request, Response response) { 
    response.type("application/json"); 

    JSONObject jo = new JSONObject(); 
    jo.put("data", "someData"); 
    return jo; 
} 
  • を使用してあなたがJSOを変更することができるので、より良いIMOですNオブジェクトをはるかに便利な方法で(ただし、あなたはimport org.json.JSONObjectにする必要があります)。

    次に、クライアント側では、データをJSONデータ型として扱う必要があります。それが役に立てば幸い。

  • +0

    ありがとうございます!これはうまくいきましたが、私はなぜsparkのレスポンスを知らないのですか?body()は何も身体に入れていませんでした。 –

    +0

    @SamShihはこの問題をhttps://github.com/perwendel/spark/issues/750で確認します。これ以上混乱するのは普通です。これは古い問題であり、悪い/誤解を招くようなデザインのIMOです。 –

    +0

    @ k.liakosが同意した。 – SHG

    関連する問題