kzen.dev
  • Questions
  • Tags
  • Utilisateurs
Notifications
Récompenses
Inscription
Une fois inscrit, vous serez informé des réponses et des commentaires à vos questions.
Connectez-vous
Si vous avez déjà un compte, connectez-vous pour vérifier les nouvelles notifications.
Il y aura des récompenses pour les questions, réponses et commentaires ajoutés.
Détails
Source
Editer
 user1857181
user1857181
Question

@RequestParam vs @PathVariable

Quelle est la différence entre @RequestParam et @PathVariable lors du traitement des caractères spéciaux ?

+ a été accepté par @RequestParam comme espace.

Dans le cas de @PathVariable, + a été accepté comme +.

322 2012-12-05T03:25:03+00:00 3
 nazar_art
nazar_art
Question modifiée 24 octobre 2018 в 6:40
Programmation
java
spring
spring-mvc
Cette question a 1 réponse en anglais, pour les lire connectez-vous à votre compte.
 Ralph
Ralph
5 décembre 2012 в 7:47
2012-12-05T07:47:16+00:00
Détails
Source
Editer
#17900790
  • @PathVariable permet d'obtenir un placeholder de l'URI (Spring appelle cela un URI Template)
  • Voir [Spring Reference Chapter 16.3.2.2 URI Template Patterns][1].
  • @RequestParam permet d'obtenir un paramètre de l'URI - voir [Spring Reference Chapter 16.3.3.3 Binding request parameters to method parameters with @RequestParam][2].

Si l'URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013 obtient les factures de l'utilisateur 1234 le 5 décembre 2013, la méthode du contrôleur ressemblerait à ceci :

@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List<Invoice> listUsersInvoices(
            @PathVariable("userId") int user,
            @RequestParam(value = "date", required = false) Date dateOrNull) {
  ...
}

[1] : http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-ann-requestmapping-uri-templates [2] : http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-ann-requestparam [3] : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/annotation/PathVariable.html#required--

En outre, les paramètres de requête peuvent être facultatifs et, depuis Spring 4.3.3, les variables de chemin [peuvent également être facultatives][3]. Attention toutefois, cela peut modifier la hiérarchie des chemins d'accès aux URL et introduire des conflits de mappage de requêtes. Par exemple, est-ce que /user/invoices fournit les factures de l'utilisateur null ou des détails sur un utilisateur avec l'ID "invoices" ?

 Oskarzito
Oskarzito
Réponse modifiée 18 septembre 2019 в 9:55
473
0
 Xelian
Xelian
14 octobre 2016 в 10:00
2016-10-14T10:00:59+00:00
Détails
Source
Editer
#17900792

Annotation @RequestParam utilisée pour accéder aux valeurs des paramètres de requête de la demande. Regardez l'URL de la requête suivante :

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

Dans la requête URL ci-dessus, les valeurs de param1 et param2 sont accessibles comme suit :

public String getDetails(
    @RequestParam(value="param1", required=true) String param1,
        @RequestParam(value="param2", required=false) String param2){
...
}

Voici la liste des paramètres pris en charge par l'annotation @RequestParam :

  • defaultValue - Il s'agit de la valeur par défaut comme mécanisme de repli si la requête ne contient pas la valeur ou si elle est vide.
  • name - Nom du paramètre à lier.
  • required - Si le paramètre est obligatoire ou non. Si c'est vrai, l'envoi de ce paramètre échouera.
  • value - Il s'agit d'un alias pour l'attribut name.

@PathVariable

@PathVariable identifie le modèle qui est utilisé dans l'URI pour la demande entrante. Examinons l'URL de la demande ci-dessous :

http://localhost:8080/springmvc/hello/101?param1=10&param2=20

La requête URL ci-dessus peut être écrite dans votre Spring MVC comme ci-dessous :

@RequestMapping("/hello/{id}")    public String getDetails(@PathVariable(value="id") String id,
    @RequestParam(value="param1", required=true) String param1,
    @RequestParam(value="param2", required=false) String param2){
.......
}

L'annotation @PathVariable n'a qu'une seule valeur d'attribut pour lier le modèle d'URI de la requête. Il est possible d'utiliser plusieurs annotations @PathVariable dans une seule méthode. Mais assurez-vous que pas plus d'une méthode n'a le même modèle.

Il existe également une autre annotation intéressante : @MatrixVariable

http://localhost:8080/spring_3_2/matrixvars/stocks;BT.A=276.70,+10.40,+3.91;AZN=236.00,+103.00,+3.29;SBRY=375.50,+7.60,+2.07

Et la méthode du contrôleur pour cela

 @RequestMapping(value = "/{stocks}", method = RequestMethod.GET)
  public String showPortfolioValues(@MatrixVariable Map<String, List<String>> matrixVars, Model model) {

    logger.info("Storing {} Values which are: {}", new Object[] { matrixVars.size(), matrixVars });

    List<List<String>> outlist = map2List(matrixVars);
    model.addAttribute("stocks", outlist);

    return "stocks";
  }

Mais vous devez l'activer :

<mvc:annotation-driven enableMatrixVariables="true" >
 Xelian
Xelian
Réponse modifiée 3 janvier 2017 в 5:48
102
0
 andy
andy
26 septembre 2014 в 2:13
2014-09-26T02:13:00+00:00
Détails
Source
Editer
#17900791

il se peut que le type midia application/x-www-form-urlencoded convertisse l'espace en +, et que le récepteur décode les données en convertissant le + en espace.vérifiez l'url pour plus d'infos.http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1

0
0
Communautés apparentées 1
Java 🇫🇷
Java 🇫🇷
2 utilisateurs
Discutons de Java, de ses framework et de son utilisation Retrouvez d'autres groupes de développeurs francophones sur @dev_fr
Ouvrir telegram
Ajouter une question
Catégories
Toutes
Technologie
Culture / Loisirs
Vie / Arts
Science
Professionnel
Entreprises
Utilisateurs
Tous
Nouveau
Populaire
1
Ilya Smirnov
Enregistré il y a 1 jour
2
Денис Васьков
Enregistré il y a 2 jours
3
Dima Patrushev
Enregistré il y a 4 jours
4
sirojidddin otaboyev
Enregistré il y a 1 semaine
5
Елена Гайдамамакинат
Enregistré il y a 1 semaine
DE
EL
ES
FR
ID
IT
JA
KO
NL
NO
PT
RO
RU
SL
TR
ZH
© kzen.dev 2023
Source
stackoverflow.com
sous licence cc by-sa 3.0 avec l'attribution