Guide de Spring WebUtils et ServletRequestUtils

1. Vue d’ensemble

Dans cet article, nous allons explorer les utilitaires de requête Web intégrés à Spring MVC - WebUtils , ServletRequestUtils .

** 2. WebUtils et ServletRequestUtils

**

Dans presque toutes les applications, nous sommes confrontés à des situations où nous devons extraire certains paramètres d’une requête HTTP entrante .

Pour ce faire, nous avons dû créer des segments de code très chargés comme:

HttpSession session = request.getSession(false);
if (session != null) {
    String foo = session.getAttribute("parameter");
}

String name = request.getParameter("parameter");
if (name == null) {
    name = "DEFAULT";
}

En utilisant WebUtils et ServletRequestUtils , nous pouvons le faire avec une seule ligne de code.

  • Pour voir comment fonctionnent ces utilitaires, créons une application Web simple. **

** 3. Exemples de pages

**

Nous devons créer des exemples de pages afin de pouvoir relier les URL. Nous utiliserions Spring Boot et https://search.maven.org/classic/#search % 7Cga% 7C1% 7Ca% 3A% 22thymeleaf% 22[ Thymeleaf ]comme moteur de modèle. Nous devons ajouter les dépendances requises pour eux.

Créons une page avec un formulaire simple:

<form action="setParam" method="POST">
    <h3>Set Parameter:  </h3>
    <p th:text="${parameter}" class="param"/>
    <input type="text" name="param" id="param"/>
    <input type="submit" value="SET"/>
</form>
<br/>
<a href="other">Another Page</a>

Comme nous pouvons le constater, nous créons un formulaire pour lancer la requête POST .

Il existe également un lien, qui redirige les utilisateurs vers la page suivante, où nous montrerons le paramètre soumis à partir de l’attribut de session.

Et créons une deuxième page:

Parameter set by you: <p th:text="${parameter}" class="param"/>

** 4. Usage

**

Maintenant que nous avons fini de construire les vues, créons notre contrôleur, utilisons ServletRequestUtils et récupérons le paramètre request

@PostMapping("/setParam")
public String post(HttpServletRequest request, Model model) {
    String param
      = ServletRequestUtils.getStringParameter(
        request, "param", "DEFAULT");

    WebUtils.setSessionAttribute(request, "parameter", param);

    model.addAttribute("parameter", "You set: " + (String) WebUtils
      .getSessionAttribute(request, "parameter"));

    return "utils";
}

Notez comment nous utilisons l’API getStringParameter dans ServletRequestUtils pour extraire le nom du paramètre de requête param ; une valeur par défaut sera attribuée au paramètre request si aucune valeur ne parvient au contrôleur.

Et, bien sûr, notez l’API setSessionAttribute sur WebUtils utilisée pour définir une valeur dans l’attribut de session. Nous n’avons pas besoin de vérifier explicitement si une session existe déjà, ni de lien dans le servlet vanilla. Spring le configurera à la volée.

De la même manière, créons l’autre gestionnaire qui affichera l’attribut de session suivant:

@GetMapping("/other")
public String other(HttpServletRequest request, Model model) {

    String param = (String) WebUtils.getSessionAttribute(
      request, "parameter");

    model.addAttribute("parameter", param);

    return "other";
}

C’est tout ce dont nous avons besoin pour créer notre application.

Un point rapide à noter ici est que ServletRequestUtils a de merveilleuses fonctionnalités intégrées qui vont automatiquement transtyper le paramètre request en fonction de nos besoins.

Voici comment nous pouvons convertir le paramètre request en Long :

Long param = ServletRequestUtils.getLongParameter(request, "param", 1L);

De même, nous pouvons convertir le paramètre request en d’autres types:

boolean param = ServletRequestUtils.getBooleanParameter(
  request, "param", true);

double param = ServletRequestUtils.getDoubleParameter(
  request, "param", 1000);

float param = ServletRequestUtils.getFloatParameter(
  request, "param", (float) 1.00);

int param = ServletRequestUtils.getIntParameter(
  request, "param", 100);

Un autre point à noter est que ServletRequestUtils a une autre méthode getRequiredStringParameter (demande ServletRequest, nom de chaîne) pour extraire le paramètre de demande. La différence est que si le paramètre n’est pas trouvé dans la demande entrante, il déclencherait ServletRequestBindingException . Cela peut être utile lorsque nous devons jouer avec des données critiques.

Voici un exemple d’extrait de code:

try {
    ServletRequestUtils.getRequiredStringParameter(request, "param");
} catch (ServletRequestBindingException e) {
    e.printStackTrace();
}

Nous pourrions également créer un cas de test JUnit simple pour tester l’application:

@Test
public void givenParameter__setRequestParam__andSetSessionAttribute()
  throws Exception {
      String param = "testparam";

      this.mockMvc.perform(
        post("/setParam")
          .param("param", param)
          .sessionAttr("parameter", param))
          .andExpect(status().isOk());
  }

5. Conclusion

Dans cet article, nous constatons que l’utilisation de WebUtils et ServletRequestUtils peut considérablement réduire l’abondance de temps système en codage passe-partout. Cependant, d’autre part, cela accroît certainement la dépendance vis-à-vis du cadre de Spring - qu’il faut garder à l’esprit si c’est un problème.

Comme toujours, le code source est disponible à l’adresse over sur GitHub .