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 ...
@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.
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.
Vous pouvez utiliser Java.util.Optional
:
@RequestMapping(value="/add/employee", method=RequestMethod.POST)
public void addEmployee(@RequestBody Optional<Employee> employee){
// ...
}