使用AsyncHttpClient进行POST时的java.lang.NullPointerException

时间:2015-04-08 20:53:59

标签: java nullpointerexception asynchttpclient

我的端点/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;
    }

我正在使用AsyncHttpClient发送异步POST(postin JSON):

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。 是因为我没有将任何地图传递给/hello吗?如果是这样,如何将POST jsonData作为Map作为端点?

2 个答案:

答案 0 :(得分: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,因此空指针异常。

答案 1 :(得分:0)

您正在为正文设置JSON字符串,这就是为什么地图为空或空或充满垃圾(我没有检查自己)。

Map是POSTed的键值对的表示。要使地图非空,您必须发布,例如name=myname&elem=myelement类型application/x-www-form-urlencoded