web-dev-qa-db-fra.com

Peut ressortir la carte POST paramètres d'une manière autre que @RequestBody

J'utilise @RestControllers avec une application où toutes les demandes sont POST demandes ... Comme j'ai appris de ce post , vous ne pouvez pas mapper des paramètres de publication individuels à des arguments de méthode individuels, vous devez plutôt encapsuler tous les paramètres dans un objet, puis utiliser cet objet comme paramètre de méthode annoté avec @RequestBody Donc

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestParam(value="idNumber") String idNumber , @RequestParam(value="applicationId") String applicationId) {
        return customerService.requestOTP(idNumber, applicationId);

ne fonctionnera pas avec une requête POST du corps {"idNumber":"345","applicationId":"64536"}

MON problème est que j'ai BEAUCOUP de POST demandes, chacune avec seulement un ou deux paramètres, il sera fastidieux de créer toutes ces objets juste pour recevoir les requêtes à l'intérieur ... alors y a-t-il une autre manière similaire à la façon dont les paramètres de requête get (paramètres URL) sont traités?

7
osama yaccoub

Oui, il y a deux façons -

tout d'abord - la façon dont vous faites juste ce que vous devez faire est d'ajouter ces paramètres avec une URL, pas besoin de les donner dans le corps. l'url sera comme - baseurl +/requestotp? idNumber = 123 & applicationId = 123

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestParam(value="idNumber") String idNumber , @RequestParam(value="applicationId") String applicationId) {
        return customerService.requestOTP(idNumber, applicationId);

deuxième- vous pouvez utiliser la carte comme suit

 @RequestMapping(value="/requestotp",method = RequestMethod.POST) 
    public String requestOTP( @RequestBody Map<String,Object> body) {
        return customerService.requestOTP(body.get("idNumber").toString(), body.get("applicationId").toString());
17
Devendra Singh

J'ai changé votre code, veuillez le vérifier

Classe DTO

public class DTO1 {


private String idNumber;
private String applicationId;

public String getIdNumber() {
    return idNumber;
}

public void setIdNumber(String idNumber) {
    this.idNumber = idNumber;
}

public String getApplicationId() {
    return applicationId;
}

public void setApplicationId(String applicationId) {
    this.applicationId = applicationId;
}

}

Méthode du contrôleur de repos

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
public String requestOTP( @RequestBody DTO1 dto){
    System.out.println(dto.getApplicationId()+"  (------)  "+dto.getIdNumber());
    return "";
}

Type de demande - application/json {"idNumber": "345", "applicationId": "64536"}

OR

@RequestMapping(value="/requestotp",method = RequestMethod.POST) 
public String requestOTP( @RequestBody String dto){
    System.out.println(dto);
    return "";
}
5
Deedar Ali Brohi