Leitfaden für Spring WebUtils und ServletRequestUtils

1. Überblick

In diesem kurzen Artikel werden die integrierten Webanforderungsfunktionen in Spring MVC ( WebUtils , ServletRequestUtils ) beschrieben.

** 2. WebUtils und ServletRequestUtils

**

In fast allen Anwendungen sehen wir uns Situationen ** gegenüber, in denen wir einige Parameter aus einer eingehenden HTTP-Anforderung abrufen müssen.

Dafür mussten wir einige wirklich hektische Codesegmente erstellen:

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

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

Mit WebUtils und ServletRequestUtils können wir dies mit nur einer Codezeile tun.

Um zu sehen, wie diese Dienstprogramme funktionieren, erstellen wir eine einfache Webanwendung. **

** 3. Beispielseiten

**

Wir müssen Musterseiten erstellen, um die URLs verknüpfen zu können. Wir würden Spring Boot und https://search.maven.org/classic/#search verwenden % 7Cga% 7C1% 7Ca% 3A% 22thymeleaf% 22[ Thymeleaf ]als unsere Vorlagen-Engine. Wir müssen die erforderlichen Abhängigkeiten für sie hinzufügen.

Erstellen wir eine Seite mit einem einfachen Formular:

<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>

Wie wir sehen, erstellen wir ein Formular zum Initiieren der POST -Anforderung.

Es gibt auch einen Link, über den Benutzer zur nächsten Seite weitergeleitet werden, auf der der übergebene Parameter aus dem Sitzungsattribut angezeigt wird.

Und lassen Sie uns eine zweite Seite erstellen:

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

** 4. Verwendungszweck

**

Nachdem wir nun die Ansichten erstellt haben, erstellen wir unseren Controller, verwenden ServletRequestUtils und rufen den Anforderungsparameter ab:

@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";
}

Beachten Sie, wie wir die getStringParameter -API in ServletRequestUtils verwenden, um den Namen des Anforderungsparameters param abzurufen. Ein Standardwert wird dem Anforderungsparameter zugewiesen, wenn kein Wert in die Steuerung gelangt.

Beachten Sie natürlich die setSessionAttribute -API aus WebUtils , mit der ein Wert im Sitzungsattribut festgelegt wird. Wir müssen weder explizit prüfen, ob bereits eine Sitzung existiert, noch einen Link im Vanilla-Servlet. Spring konfiguriert es im laufenden Betrieb.

In gleicher Weise erstellen wir den anderen Handler, der folgendes Sitzungsattribut anzeigen würde:

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

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

    model.addAttribute("parameter", param);

    return "other";
}

Das ist alles, was wir brauchen, um unsere Anwendung zu erstellen.

Ein kurzer Punkt, der hier zu beachten ist, ist, dass ServletRequestUtils einige wunderbare integrierte Funktionen hat, die den Anforderungsparameter automatisch entsprechend unserer Anforderungen typisieren.

So können wir den Anforderungsparameter in Long konvertieren:

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

Ebenso können wir den Anforderungsparameter in andere Typen konvertieren:

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);

Ein weiterer wichtiger Punkt ist, dass ServletRequestUtils eine andere Methode hat, getRequiredStringParameter (ServletRequest-Anforderung, Stringname) , um den Anforderungsparameter abzurufen. Der Unterschied besteht darin, dass der Parameter ServletRequestBindingException ausgelöst wird, wenn der Parameter nicht in der eingehenden Anforderung gefunden wird. Dies kann nützlich sein, wenn wir mit kritischen Daten spielen müssen.

Nachfolgend finden Sie ein Beispielcode-Snippet:

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

Wir könnten auch einen einfachen JUnit-Testfall erstellen, um die Anwendung zu testen:

@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. Fazit

In diesem Artikel wird gezeigt, dass die Verwendung von WebUtils und ServletRequestUtils eine Menge Boilerplate-Codierungsaufwand erheblich reduzieren kann. Auf der anderen Seite wird jedoch die Abhängigkeit vom Frühlings-Framework sicherlich erhöht - was zu bedenken ist, wenn dies ein Problem ist.

Wie immer ist der Quellcode https://github.com/eugenp/tutorials/tree/master/spring-boot [over auf GitHub verfügbar.