2017-10-12 7 views
2

J'essaye d'envoyer deux paramètres en utilisant AJAX à mon contrôleur Spring REST en utilisant la méthode POST. Cependant, ces paramètres apparaissent sous null dans mon contrôleur. S'il vous plaît trouver le code et laissez-moi savoir si je manque quelque chose.Réception des paramètres dans le contrôleur Rest à partir de la méthode Post en utilisant Spring et Ajax

var formData = { 
    txToClose: '1234,5678,98549', 
    sno: '0195' 
}; 

$.ajax({ 
    type: 'post', 
    url: url, 
    async: false, 
    data: JSON.stringify(formData), 
    contentType: "application/json", 
    dataType: "json",  
    success: function(result, status, xhr) { 
    console.log(result); 
    }       
}); 
@PostMapping("/txToClose") 
public ResultDto txToClose(HttpServletRequest request, HttpServletResponse response) throws BBException 
{ 
    logger.info("Called txToClose controller"); 
    ResultDto resultDto = new ResultDto(); 

    String txToClose = request.getParameter("txToClose"); 
    String sno = request.getParameter("sno"); 

    logger.info("Transactions to close :" + txToClose + ", Serial Num :" + sno); 
} 
+0

Mis à part le problème, vous devez supprimer vraiment 'async: false'. C'est une pratique horrible –

+0

@RoryMcCrossan, une idée sur la raison pour laquelle ces paramètres ne sont pas reçus? – Yakhoob

+0

Non désolé. Je n'ai aucune expérience avec le printemps. –

Répondre

0

créer la classe comme ceci:

class Myclass{ 
      private String txToClose; 
      private String sno; 
// getters setters 
    } 

et dans votre méthode comme ceci:

@PostMapping("/txToClose") 
public ResultDto txToClose(@RequestBody Myclass class) throws BBException 
{ 
    // your logic 
} 
+0

mais autre que la création de classe, pourquoi ne puis-je pas recevoir en utilisant request.getparameter? – Yakhoob

+0

J'ai essayé sur votre chemin, mais ça ne marche toujours pas. @Requestbody a 415 type de support non supporté, donc j'ai utilisé ModelAttribute, mais les valeurs nulles passent – Yakhoob

+0

sincèrement je n'ai jamais utilisé request.getParameter() pour obtenir param json au printemps, mais vous pouvez voir ce https://stackoverflow.com/questions/34781980/read-json-in-java-servlet/34782168 –

0

Je pense que la partie qui ne fonctionne pas dans votre code est la demande .getParameter() car il ne serait pas capable d'identifier les paramètres et les valeurs dans le cas de données json. Au lieu d'utiliser quelque chose comme ceci:

StringBuilder sb = new StringBuilder(); 
BufferedReader reader = request.getReader(); 
try { 
     String line; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line).append('\n'); 
     } 
} 
finally { 
     reader.close(); 
} 
System.out.println(sb.toString()); 

Utilisez la logique ci-dessus dans votre contrôleur pour traiter la JSON demande.Veuillez référer cette link pour d'autres idées pour traiter JSON lorsqu'ils sont pris comme HttpServeletRequest.

+0

Mohit .. J'ai résolu . la question ResultDto publique txToClose (HttpServletRequest demande, HttpServletResponse réponse, @ RequestBody ObjectNode JSON) lance BBException { logger.info ("appelé txToClosecontroller"); résultat ResultDto = new ResultDto(); Chaîne txToClose = jso n.get ("txToClose"). asText(); } – Yakhoob

+0

Vous avez utilisé une entité pour prendre la demande, puis à droite? – Mohit

+0

Cela aurait pu être possible sans @RequestBody, essayez une fois ma méthode pour voir si cela fonctionne ou pas. Juste pour tester le but, si vous le pouvez. – Mohit

0

résolu en utilisant

public ResultDto txToClose(HttpServletRequest request, HttpServletResponse response,@RequestBody ObjectNode json) throws BBException { 
    logger.info("Called txToClosecontroller"); 
    ResultDto result = new ResultDto(); 
    String txToClose= json.get("txToClose").asText(); 
}