web-dev-qa-db-fra.com

Les en-têtes Spring MVC @RequestMapping ne peuvent accepter qu'une seule valeur?

Cela fonctionnera:

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json"}) {
    .......
}

Si j'ajoute une autre valeur comme celle-ci, cela échouera et me dira ceci:

La méthode HTTP spécifiée n'est pas autorisée pour la ressource demandée (la méthode de demande 'POST' n'est pas prise en charge)

@RequestMapping(value = "/test", method = RequestMethod.POST,
    headers = {"content-type=application/json","content-type=application/xml"}) {
    .......
}


Je suppose que c'est parce que Spring pense que les deux valeurs type de conten ont une relation "ET" mais à la place je veux qu'elles soient "OU".

Aucune suggestion?

Merci!

17
Bobo

Avez-vous essayé de faire content-type=application/json,application/xml?

Je ne sais pas si cela fonctionnerait, mais en mettant deux content-type en-têtes là-dedans, je pense qu'un seul gagnera.

OU

utiliser éventuellement deux RequestMapping annotations sur la même méthode avec des content-type en-têtes?

22
Dave G

Si vous utilisez Spring 3.1.x . Vous pouvez regarder en utilisant consomme , produit les attributs de l'annotation @RequestMapping. Voici le blog du printemps sur les améliorations:

http://spring.io/blog/2011/06/13/spring-3-1-m2-spring-mvc-enhancements/

Extrait du document ci-dessus:

@RequestMapping(value="/pets", headers="Content-Type=application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

est remplacé par:

@RequestMapping(value="/pets", consumes="application/json")
public void addPet(@RequestBody Pet pet, Model model) {
    // ...
}

De plus, si vous avez besoin de plusieurs types de supports. Vous pouvez effectuer les opérations suivantes:

produces={"application/json", "application/xml"}

consumes={"application/json", "application/xml"}
33
MasterV