123 votes

Obtenir la charge utile d'une requête POST dans un servlet Java

J'ai une bibliothèque javascript qui envoie une demande POST à mon servlet Java, mais dans le fichier doPost mais je ne parviens pas à obtenir le contenu de la requête. Dans les outils de développement de chrome, tout le contenu se trouve dans la section Request Payload dans l'onglet headers, et le contenu est là, et je sais que le POST est reçu par la méthode doPost, mais il n'y a rien.

Pour le HttpServletRequest comment puis-je obtenir les données dans les données utiles de la requête ?

Faire request.getParameter() o request.getAttributes() les deux se retrouvent sans données

22voto

Lloyd Rochester Points 619

Si le contenu du corps est une chaîne de caractères en Java 8, vous pouvez le faire :

String body = request.getReader().lines().collect(Collectors.joining());

7voto

Harry Developer Points 115

Si vous êtes en mesure d'envoyer la charge utile en JSON, c'est le moyen le plus pratique de lire la charge utile :

Exemple de classe de données :

public class Person {
    String firstName;
    String lastName;
    // Getters and setters ...
}

Exemple de données utiles (corps de la requête) :

{ "firstName" : "John", "lastName" : "Doe" }

Code pour lire la charge utile dans la servlet (nécessite com.google.gson.*) :

Person person = new Gson().fromJson(request.getReader(), Person.class);

C'est tout. Sympa, facile et propre. N'oubliez pas de mettre l'en-tête content-type à application/json.

2voto

Timothy Heider Points 81

Essayez d'utiliser Java 8 avec des ressources :

    StringBuilder stringBuilder = new StringBuilder();
    try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()))) {
        char[] charBuffer = new char[1024];
        int bytesRead;
        while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
            stringBuilder.append(charBuffer, 0, bytesRead);
        }
    }

1voto

Arol Points 44

Vous avez seulement besoin

request.getParameterMap()

pour obtenir les paramètres POST et GET.

La méthode renvoie un Map<String,String[]> .

Vous pouvez lire les paramètres dans la carte en

Map<String, String[]> map = request.getParameterMap();
//Reading the Map
//Works for GET && POST Method
for(String paramName:map.keySet()) {
    String[] paramValues = map.get(paramName);

    //Get Values of Param Name
    for(String valueOfParam:paramValues) {
        //Output the Values
        System.out.println("Value of Param with Name "+paramName+": "+valueOfParam);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X