Creating a UrlEncodedFormEntity from a List of NameValuePairs throws a NullPointerException

…衆ロ難τιáo~ 提交于 2019-12-20 17:23:39

问题


I'm creating a unit test to try out the servlet I just created.

@Test
public void test() throws ParseException, IOException {

  HttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost("http://localhost:8080/WebService/MakeBaby");

  List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

  nameValuePairs.add(new BasicNameValuePair("father_name", "Foo"));
  nameValuePairs.add(new BasicNameValuePair("mother_name", "Bar"));

  post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
  HttpResponse response = null;

  try {
    response = client.execute(post);
  } catch (ClientProtocolException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }

  String stringifiedResponse = EntityUtils.toString(response.getEntity());

  System.out.println(stringifiedResponse);

  assertNotNull(stringifiedResponse);
}

The following line generates a NullPointerException:

post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

Is there something I'm missing?


回答1:


Sorry for the stupid question, just solved it by adding the utf-8 format.

post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));

Creating a UrlEncodedFormEntity without passing the format will use DEFAULT_CONTENT_CHARSET which is ISO-8859-1

Which baffles me... what's causing it to throw NullPointerException?




回答2:


Not a stupid question at all. I think the confusion is that in httpclient 4.1, no encoding format was required- This worked:

HttpEntity entity = new UrlEncodedFormEntity(params);
method.setEntity(entity);

When I changed the dependency to httpclient 4.2 in order to access URIBuilder, I got:

java.lang.NullPointerException
at org.apache.http.entity.StringEntity.<init>(StringEntity.java:70)
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:78)
at org.apache.http.client.entity.UrlEncodedFormEntity.<init>(UrlEncodedFormEntity.java:92)...

With 4.2, it seems the constructor requires the encoding, as you noted. Confusingly, the doc specifies that the old constructor is still available, but it doesn't seem to work anymore.

public UrlEncodedFormEntity(List parameters) doc



来源:https://stackoverflow.com/questions/10942205/creating-a-urlencodedformentity-from-a-list-of-namevaluepairs-throws-a-nullpoint

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!