web-dev-qa-db-fra.com

Utilisez @RequestBody avec le corps en option dans la dernière version Spring v4

Comment rendre le corps facultatif dans les appels à l'API REST lors de l'utilisation de l'annotation @RequestBody Dans Spring?

Avec la dernière version de Spring, si vous utilisez l'annotation @RequestBody, Cela oblige le client à envoyer le corps tout le temps sans le rendre facultatif.

J'ai essayé @RequestBody (required=false) mais cela n'a pas fonctionné et ma demande est toujours nulle.

Comment puis-je réussir à convertir la demande en l'objet requis approprié sans rendre le corps obligatoire?

Par exemple:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Employee employee){
    // ...
}

Ici, je veux ajouter un employé en utilisant POST mais sans corps. Comment dois-je faire? La dernière version de Spring renvoie l'erreur "corps manquant" si j'envoie un corps vide ...

27
Mike Powell

@Santosh, je ne sais pas de quel argument requis vous parlez. Mike a déjà mentionné qu'il avait essayé d'utiliser @RequestBody (required=false) et la demande était toujours nulle. Peut-être pouvez-vous élaborer davantage et donner un exemple.

@Mike, vous pouvez probablement essayer d'avoir un autre convertisseur séparé qui répondra à votre objectif.

Remarque: j'ai remarqué le même problème avec Spring v4.1.6 et Mike pourrait l'utiliser car il a mentionné qu'il utilisait la dernière version.

37
Jack Dorson

Je suppose que vous utilisez la version Spring au-dessus de 3.2 car il y avait un problème avec la version. @ RequestBody devrait avoir un paramètre requis pour permettre à un corps de requête d'être optionnel

Jetez un œil au lien suivant Spring @RequestBody Anotation

@RequestBody Le corps prend et l'argument requis qui est vrai par défaut. La spécification de false vous aidera

résumé public booléen requis

Si le contenu du corps est requis. La valeur par défaut est true , conduisant à une exception levée au cas où il n'y aurait pas de contenu corporel. Mettez-le sur false si vous préférez que null soit transmis lorsque le contenu du corps est nul.

8
Santosh Joshi

Vous pouvez utiliser Java.util.Optional:

@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
    // ...
}
2
cilf