0

/test私は期待するエンドポイントを持っていますMap:

 @POST("/hello")
    @PermitAll
    public JSONObject test(Map param) throws JsonParseException {
    String elementName = param.get("name").toString();
    String elem = param.get("elem").toString();
        JSONObject json=new JSONObject();
        try {
            json.put("id",1);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return json;
    }

そして、次を使用して非同期 POST (postin JSON) を送信していますAsyncHttpClient

public static void asyncCallPost(JSONObject jsonData) throws Exception {
        AsyncHttpClient client = new AsyncHttpClient();
        try { 
            Response response = client.preparePost(url) 
                    .addHeader("Content-Type", "application/json") 
                    .addHeader("Content-Length", "" + jsonData.length()) 
                    .setBody(jsonData.toString()).execute().get(); 
            if (response.getStatusCode() != 200) { 
                throw new Exception("Error ");
            } 
        } finally { 
            client.close(); 
        } 
    }

しかし、私は得てjava.lang.NullPointerExceptionいます。に Map を渡さないから/helloですか?もしそうなら、どうやってエンドポイントを作るPOSTのですか?jsonDataMap

4

2 に答える 2

0

本体に JSON 文字列を設定しているため、 Map が null または空であるか、ゴミでいっぱいです (自分で確認しませんでした)。

Map は、POST されるキーと値のペアの表現です。Map を空にしないようにするには、たとえばname=myname&elem=myelementtype として投稿する必要がありますapplication/x-www-form-urlencoded

于 2015-04-08T22:02:11.323 に答える
0

詳細な情報がないとわかりませんが、次の点を変更する必要があると思われます。

String elementName = param.get("name").toString();
String elem = param.get("elem").toString();

String elementName;
if(param.get("name") != null){
   elementName = param.get("name").toString();
}
String elem;
if(param.get("elem") != null){
   elem = param.get("elem").toString();
}

param.get("name") である理由は、toString を実行しようとしている null を返しているため、null ポインター例外です。

于 2015-04-08T21:02:24.993 に答える