Spring MVC - Comment faire pour obtenir une demande tous les params dans une carte au Printemps contrôleur?
Exemple d'URL:
../search/?attr1=value1&attr2=value2&attr4=value4
Je ne connais pas les noms de attr1, att2, et attr4.
Je voudrais être en mesure de faire quelque chose comme ça (ou similaire, ne pas s'inquiéter, tant que j'ai accès à la Carte de demande de param name -> valeur:
@RequestMapping(value = "/search/{parameters}", method = RequestMethod.GET)
public void search(HttpServletRequest request,
@PathVariable Map<String,String> allRequestParams, ModelMap model)
throws Exception {//TODO: implement}
Comment puis-je réaliser cela avec Spring MVC?
Vous devez vous connecter pour publier un commentaire.
Tandis que les autres réponses sont correctes, il n'est certainement pas le "Printemps de façon à" utilisation de l'objet HttpServletRequest directement. La réponse est en fait assez simple et ce que vous attendez si vous êtes familier avec Spring MVC.
@RequestParam MultiValueMap<String, String>
import org.springframework.ui.ModelMap;
ainsi.Modifier
Il a été souligné qu'il existe (à moins de 3,0) une pure Spring MVC mécanisme par lequel on peut obtenir ces données. Je ne les détaillerai pas ici, comme c'est la réponse d'un autre utilisateur. Voir @AdamGent réponse pour plus de détails, et n'oubliez pas de upvote il.
Au Printemps 3.2 documentation de ce mécanisme est mentionné sur le
RequestMapping
JavaDoc de la page et leRequestParam
JavaDoc de la page, mais au préalable, il n'est mentionné que dans leRequestMapping
page. Dans la version 2.5 de la documentation il n'y a aucune mention de ce mécanisme.C'est probablement l'approche privilégiée pour la plupart des développeurs, car il élimine les (au moins c') de liaison à la
HttpServletRequest
objet défini par le servlet-api jar./Modifier
Vous devriez avoir accès à la demande de la chaîne de requête via
demande.getQueryString()
.En plus de getQueryString, les paramètres de la requête peut aussi être récupéré à partir de demande.getParameterMap() comme une Carte.
@RequestParam
fera un plaisir de prendre unMap
comme un paramètre (voir ma réponse).@RequestParam
sur unMap<String,String>
pour récupérer tous les paramètres de chaîne de requête. Et s'il vous plaît, ne vous sentez pas si en horreur les réponses que vous voyez ici...ils ne sont pas que mauvais 🙂 static.springsource.org/spring/docs/3.1.x/javadoc-api/org/...@RequestParam Map<>
chemin n'a pas été fait. J'ai que des ennuis que de nombreux projets modernes, j'ai vu Spring MVC (printemps 3.1 et supérieur) ils vont mettre les HttpServletRequest et HttpServletResponse sur chaque méthode. Et il semble que c'est parce que les développeurs juniors utilisation StackOverflow et google au lieu de regarder la doc. De ce fait, il est difficile pour le Printemps de projet pour passer de l'api servlet-à-dire un Netty API. JAX-RS a des problèmes d'abus, mais à un bien moindre degré.L'objet HttpServletRequest fournit une carte de paramètres déjà. Voir demande.getParameterMap() pour plus de détails.
vous pouvez simplement utiliser ce:
Qui devrait fonctionner correctement
Utilisation
org.springframework.web.context.request.WebRequest
comme un paramètre dans votre méthode de contrôleur, il fournit la méthodegetParameterMap()
, l'avantage est que vous n'avez pas serré votre demande à la Servlet API, le WebRequest est un exemple de JavaEE modèle Objet de Contexte.Il y a deux interfaces
org.springframework.web.context.request.WebRequest
org.springframework.web.context.request.NativeWebRequest
Permet de générique du paramètre de la requête d'accès ainsi que
request/session
attribut d'accès, sans lien avec le natif de Servlet/API de Portlet.Ex.:
P. S. Il y a Docs sur les arguments qui peuvent être utilisés en tant que Contrôleur params.
String[]
que la valeur? J'ai à l'index à 0, juste pour obtenir de la valeur.key=val1,val2
oukey=val1&key=val2
(si je me souviens bien de printemps à l'appui de ces deux inscriptions), de sorte que vous obtiendrez un tableau avec les 2 élémentsJe pourrais être en retard à la fête,
mais selon ma compréhension , vous êtes à la recherche de quelque chose comme ceci :
Voici l'exemple simple de se demande params dans une Carte.
Dans ce cas, il va lier la valeur de studentName et studentEmail avec le nom et l'adresse électronique des variables respectivement.
//tous les params va stocker dans jsonObejct
Il y a une différence fondamentale entre les paramètres de la requête et le chemin d'accès des paramètres. Il va comme ceci:
www.your_domain?queryparam1=1&queryparam2=2
- les paramètres de la requête.www.your_domain/path_param1/entity/path_param2
- chemin paramètres.Ce que je trouve surprenant, c'est que dans Spring MVC monde, beaucoup de gens confondent l'un pour l'autre.
Alors que les paramètres de la requête sont plus comme des critères pour une recherche, chemin params sera plus susceptible de l'identifier de manière unique une ressource. Cela dit, cela ne signifie pas que vous ne pouvez pas avoir plusieurs chemin de paramètres dans votre URI, parce que la structure des ressources peuvent être imbriquées. Par exemple, disons que vous avez besoin d'une voiture spécifique des ressources d'une personne en particulier:
www.my_site/customer/15/car/2
- à la recherche d'une deuxième voiture dans un 15e client.Ce qui serait un cas d'utilisation pour mettre tous chemin des paramètres dans une carte? Chemin des paramètres n'ont pas une "clé" quand vous regardez un URI lui-même, ces clés à l'intérieur de la carte seront prises à partir de votre @Cartographie de l'annotation, par exemple:
À partir de l'adresse HTTP/REST point de vue chemin de paramètres ne peuvent pas être projetées sur une carte vraiment. Il est tout au sujet du Printemps, de la flexibilité et de leur volonté d'accueillir tous les caprices, à mon avis.
Je n'aurais jamais utiliser une carte de chemin de paramètres, mais il peut être très utile pour les paramètres de la requête.