La création D'une UrlEncodedFormEntity à partir d'une liste de NameValuePairs génère une NullPointerException
Je crée un test unitaire pour essayer la servlet que je viens de créer.
@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);
}
La ligne suivante génère une exception NullPointerException:
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
Y a-t-il quelque chose qui me manque?
2 réponses
Désolé pour la question stupide, juste résolu en ajoutant le format utf-8.
post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
La Création d'un UrlEncodedFormEntity
sans passer par le format à utiliser DEFAULT_CONTENT_CHARSET
qui ISO-8859-1
Ce Qui me déconcerte... qu'est-ce qui le fait lancer NullPointerException
?
Pas une question stupide du tout. Je pense que la confusion est que dans httpclient 4.1, aucun format d'encodage n'était requis - cela a fonctionné:
HttpEntity entity = new UrlEncodedFormEntity(params);
method.setEntity(entity);
Quand j'ai changé la dépendance en httpclient 4.2 afin d'accéder à URIBuilder , j'ai obtenu:
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)...
Avec 4.2, il semble que le constructeur nécessite l'encodage, comme vous l'avez noté. De manière confuse, le doc spécifie que l'ancien constructeur est toujours disponible, mais il ne semble plus fonctionner.
UrlEncodedFormEntity Publique (Liste les paramètres) doc