Spring Namenconvention

A

AndiE

Top Contributor
Hallo,

die Frage ist vielleicht etwas dumm, beschäftigt mich aber sehr.

Es geht um ein Beispiel, wobei eine Form ausgewertet wird.
Zuerst die Dateien:

HTML-Seite "form"
HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
        <form action="#" th:action="@{/}" th:object="${personForm}" method="post">
            <table>
                <tr>
                    <td>Name:</td>
                    <td><input type="text" th:field="*{name}" /></td>
                    <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td>
                </tr>
                <tr>
                    <td>Age:</td>
                    <td><input type="text" th:field="*{age}" /></td>
                    <td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>
                </tr>
                <tr>
                    <td><button type="submit">Submit</button></td>
                </tr>
            </table>
        </form>
</body>
</html>
2. Der Conroller

Java:
package hello;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Controller
public class WebController implements WebMvcConfigurer{

    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/results").setViewName("results");
    }
    
    @GetMapping("/")
    public String showForm(PersonForm personForm) {
        return "form";
    }
    
    @PostMapping("/")
    public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "form";
        }

        return "redirect:/results";
    }
}

3. PersonForm

Java:
package hello;

import javax.validation.constraints.Min;
import javax.validation.constraints.Size;

public class PersonForm {
    @Size(min=2, max=30)
    private String name;
    @Min(18)
    private Integer age;
    @Override
    public String toString() {
        return "PersonForm [name=" + name + ", age=" + age + "]";
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    
}

Die "WebApplication"- Klasse ist normal.

Meine Frage ist einmal, dass Argumente der Methodenaufrufe insbesondere im Controller nicht verarbeitet werden. Es funktioniert aber dennoch.

Die Frage ist zum zweiten, welche Namen ich vergeben kann. Muss ein Controller den Begriff "Controller" im Namen haben?

Wo kann ich das sonst nachlesen, wie ich Namen der Klassen und Variablen gestalten muss?

Die Beziehung des HTML zum Controller ist mir auch nicht klar. Gibt es da eine gute Quelle, wo ich das nachlesen kann?
 
A

AndiE

Top Contributor
Erster Zwischenstand:

tatsächlich kann man auuf "spring.io" beim Durchsehen der Beispiele auch Quellen finden. Das Geheimnis der methoden liegt in den Annotationen. Es scheint nicht so zu sein, dass die Klassenbezeichnungen ausgwertet werden.

Aber es ist ja auch schöner statt z.B. dem klassischen "BindingResult br", das als "bindingResult" zu bezeichnen. Das macht das Programm jja letztlich auch viel lesbarer.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Meine Frage ist einmal, dass Argumente der Methodenaufrufe insbesondere im Controller nicht verarbeitet werden. Es funktioniert aber dennoch.
Was meinst du damit?

Die Frage ist zum zweiten, welche Namen ich vergeben kann. Muss ein Controller den Begriff "Controller" im Namen haben?

Wo kann ich das sonst nachlesen, wie ich Namen der Klassen und Variablen gestalten muss?
Nein, Klassen und Variablen kannst du im Wesentlichen so nennen, wie du möchtest, alles relevante läuft über Annotationen.

Nachzulesen wäre das in der offiziellen Doku zum jeweiligen Thema.

Die Beziehung des HTML zum Controller ist mir auch nicht klar. Gibt es da eine gute Quelle, wo ich das nachlesen kann?
Da besteht nur eine ziemlich lockere Beziehung.

Der Controller füllt ModelAttribute und gibt das template an - das wird dann mit den Modelattributen gerendert.
 
A

AndiE

Top Contributor
Nehmen wir mal diesen Code:

@GetMapping("/")
public String showForm(PersonForm personForm) {
return "form";
}

Er hat die Aufgabe, die "form.html" anzuzeigen. Erste Frage als WuWP(Wald und Wiesenrogrammierer): Wieso braucht er da ein Objekt PersonForm? Und was soll das überhaupt. Als WuWP habe ich gelernt, dass die Parameter auf einem Stack liegen und die Methoden diese vom Stack abrufen. Nun ist hier aber weder sichtbar ein Objekt initialisiert worden.

Die andere Methode


@PostMapping("/")
public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return "form";
}

return "redirect:/results";
}

ist für einen WuWP ebenso geheiimnisvoll. Wo sind die Daten, wenn sie validiert werden? Üblicherweise würde man sie aus der Webseiite in ein Objekt ziehen und dieses beauftragen, die Daten zu validieren( habe ich bei JSF gelesen). Hier aber nicht. Bis hierher spielt der wirkliche Inhalt der Daten überhaupt keine Rolle. Sie werden auf Gültigkeit geprüft, in diesem Fall Länge oder Wertebereich, ohne dass man sie sichtbar im Code hat.

Das ist spannend, und eine ganz schöne Umstellung, das so zu denken.

Es dauert eben von einem WuWP zu einem Meister der Spring-Ökologie zu werden.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
erstmal, in Bezug auf recht high-leveliges Java, ignoriert solche Dinge:
Als WuWP habe ich gelernt, dass die Parameter auf einem Stack liegen und die Methoden diese vom Stack abrufen.


Erste Frage als WuWP(Wald und Wiesenrogrammierer): Wieso braucht er da ein Objekt PersonForm? Und was soll das überhaupt. [...] Nun ist hier aber weder sichtbar ein Objekt initialisiert worden.
Initialisiert wird das Objekt in diesem Fall von Spring, das passiert irgendwo im Hintergrund mit schwarzer Magie.
Das führt in diesem Fall dazu, dass ein PersonForm-Objekt in den Model-Attributen liegt, und damit zb im Thymeleaf-Template verfügbar ist.
Alternativ zum initialisieren durch Spring kannst du das auch selbst initialisieren, zB wenn du die Methode ein ModelAndView-Objekt zurückgeben lässt.

Wo sind die Daten, wenn sie validiert werden? Üblicherweise würde man sie aus der Webseiite in ein Objekt ziehen und dieses beauftragen, die Daten zu validieren( habe ich bei JSF gelesen). Hier aber nicht. Bis hierher spielt der wirkliche Inhalt der Daten überhaupt keine Rolle. Sie werden auf Gültigkeit geprüft, in diesem Fall Länge oder Wertebereich, ohne dass man sie sichtbar im Code hat.
Wieder ganz viel Spring-Magie :)

Der HTML-Request enthält die Daten, um das PersonForm-Objekt zu füllen, das passiert als erstes. Dann ist der Parameter mit @Valid annotiert - Spring validiert deshalb das Objekt mit der „normalen“ Bean Validation, zB anhand der Annotationen an den einzelnen Feldern des Objekts.
Das Resultat davon landet dann im BindingResult (dabei ist einer der wenigen Konventionen relevant: das BindingResult muss der Parameter hinter dem zu validierenden Objekt sein).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
NicoDeluxe Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
NicoDeluxe Buchempfehlung Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 17
LesterBurnham Spring, Config Server, mehrere Gitlab Repos für Konfiguration - best practices Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Test mit Junit Frameworks - Spring, Play, Blade, Vaadin & Co 8
L Spring Thymeleaf Datatables Daten editieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
J Spring Boot - Reactor Frameworks - Spring, Play, Blade, Vaadin & Co 1
L Spring Boot, H2 und Restschnittstelle synchonisation mit Client Frameworks - Spring, Play, Blade, Vaadin & Co 10
TonioTec Spring Boot Datenbankabfrage Frameworks - Spring, Play, Blade, Vaadin & Co 7
L Spring Data: Wie kann ich das Datenmodell richtig definieren? Frameworks - Spring, Play, Blade, Vaadin & Co 6
NicoDeluxe Spring Boot encoding Slash in URL Parameter Frameworks - Spring, Play, Blade, Vaadin & Co 7
S Spring Boot startet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring: Testen von unterschiedlichen application.properties Werten Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot -> War File | 404 in Tomcat Frameworks - Spring, Play, Blade, Vaadin & Co 20
A Eventhandling mit Spring REST API Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Boot Anwendung "automatisch" neustarten Frameworks - Spring, Play, Blade, Vaadin & Co 3
A Spring boot Frameworks - Spring, Play, Blade, Vaadin & Co 18
bueseb84 Unit Test mit Spring Boot - Service Autowired Frameworks - Spring, Play, Blade, Vaadin & Co 0
iman Spring Security Frameworks - Spring, Play, Blade, Vaadin & Co 13
S Spring Security deaktivieren Frameworks - Spring, Play, Blade, Vaadin & Co 10
NicoDeluxe DTO <> Entity Hibernate Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 28
W Projekt Bootstrap/Kotlin/Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 0
W Kotlin / Spring Framework Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring MongoDB: Attribut in der Superklasse und @Indexed erst in der Subklasse Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Verständnisfrage DTO Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 19
NicoDeluxe Spring Boot Load Balancing Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring: MongoDB Assoziation Frameworks - Spring, Play, Blade, Vaadin & Co 1
S Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Threads Frameworks - Spring, Play, Blade, Vaadin & Co 6
F Server-Java-Spring Websockets Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Boot: Wert aus Config Datei ermitteln Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot: Ein geschütztes Verzeichnis Frameworks - Spring, Play, Blade, Vaadin & Co 1
bueseb84 Probleme mit Spring Boot Docker und Bootstrap Frameworks - Spring, Play, Blade, Vaadin & Co 9
NicoDeluxe Spring Boot Eureka/Zuul Frameworks - Spring, Play, Blade, Vaadin & Co 0
F Redirect in einer Spring Boot WebApplication Frameworks - Spring, Play, Blade, Vaadin & Co 7
F spring apllication startet nicht, ports werden verwednet Frameworks - Spring, Play, Blade, Vaadin & Co 12
B Erstes Spring Boot Projekt: Gameserver-Manager Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Kurse von Baeldung Frameworks - Spring, Play, Blade, Vaadin & Co 6
Thallius Gibt es einen "Standard" Folder für Spring deployment auf Linux Servern? Frameworks - Spring, Play, Blade, Vaadin & Co 13
L Spring Data Einträge von User zahlen und auflisten Frameworks - Spring, Play, Blade, Vaadin & Co 7
V Spring Boot, thymeleaf, Eingaben cashen oder per session speichern? Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot Security Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Spring Boot i18n Frameworks - Spring, Play, Blade, Vaadin & Co 28
bueseb84 Spring Boot : Update H2 Repository Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring Boot/ OneToMany Relation Frameworks - Spring, Play, Blade, Vaadin & Co 29
S Spring: Eine Klasse am Anfang instanzieren Frameworks - Spring, Play, Blade, Vaadin & Co 5
S Spring Boot testen mit Service Klassen Frameworks - Spring, Play, Blade, Vaadin & Co 4
iman Controller in Spring 4,0 Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring JPA / Hibernate: save Methode arbeitet nicht Frameworks - Spring, Play, Blade, Vaadin & Co 2
Thallius Spring Backend Funktion mit Langzeit Requester Frameworks - Spring, Play, Blade, Vaadin & Co 2
F spring post null werte Frameworks - Spring, Play, Blade, Vaadin & Co 1
F Spring Webanwendung Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 47
L Controller Spring Boot mit Java Frameworks - Spring, Play, Blade, Vaadin & Co 20
J Spring Boot H2 Datbase Frameworks - Spring, Play, Blade, Vaadin & Co 2
J Spring Boot Thymleaf mit Java.Optional Frameworks - Spring, Play, Blade, Vaadin & Co 0
L JavaFX Anwendung mit Spring Boot und mehrere FXML Forms Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Mit Maven (und Spring-boot) ein FatJAR und ein EAR bauen Frameworks - Spring, Play, Blade, Vaadin & Co 3
NicoDeluxe Spring Boot Basic Authentication langsam Frameworks - Spring, Play, Blade, Vaadin & Co 2
NicoDeluxe Start Stop Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 4
H spring web Frameworks - Spring, Play, Blade, Vaadin & Co 26
H Spring Boot - Dependency Injection Frameworks - Spring, Play, Blade, Vaadin & Co 26
B Java Spring Boot - POM-Problem Frameworks - Spring, Play, Blade, Vaadin & Co 8
S Spring: Werte speichern über Requests hinwege ohne DB Frameworks - Spring, Play, Blade, Vaadin & Co 24
NicoDeluxe Spring Boot parallele Requests Frameworks - Spring, Play, Blade, Vaadin & Co 1
NicoDeluxe Spring Boot Resttemplate exchange XML Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring Data Repository delete bulk Frameworks - Spring, Play, Blade, Vaadin & Co 3
S Root-Pfad zu meiner Spring Boot Application Frameworks - Spring, Play, Blade, Vaadin & Co 3
N MongoDB-Spring "Cannot use a complex object as a key value" Frameworks - Spring, Play, Blade, Vaadin & Co 0
NicoDeluxe Spring Boot Error Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Spring Boot Transactions Frameworks - Spring, Play, Blade, Vaadin & Co 10
R Spring Data: Hibernate liest nicht alle Ebenen Frameworks - Spring, Play, Blade, Vaadin & Co 5
D Spring Boot auf virtuellen Server oder Cloud? Frameworks - Spring, Play, Blade, Vaadin & Co 4
L Spring Data: Detached Entity passed to persist Fehler Frameworks - Spring, Play, Blade, Vaadin & Co 6
R Nebenjob im Bereich JEE, Spring, Servlets, REST Frameworks - Spring, Play, Blade, Vaadin & Co 3
D AWS Server Spring Boot und Datenbank Frameworks - Spring, Play, Blade, Vaadin & Co 0
S Spring Boot: Eigene Config aufbauen Frameworks - Spring, Play, Blade, Vaadin & Co 6
S Spring MVC redirect Nachricht ohne erweiterung der URL Frameworks - Spring, Play, Blade, Vaadin & Co 5
B Spring Boot/Html-Content/Web-Server Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Boot - MVC - Error flushen Frameworks - Spring, Play, Blade, Vaadin & Co 0
K Spring Boot und RestFull Frameworks - Spring, Play, Blade, Vaadin & Co 3
L Spring Data: Multiple representations of the same entity Frameworks - Spring, Play, Blade, Vaadin & Co 14
A Spring ServerQueue Frameworks - Spring, Play, Blade, Vaadin & Co 0
A Spring Server Logging Frameworks - Spring, Play, Blade, Vaadin & Co 5
F Spring Boot Test Frameworks - Spring, Play, Blade, Vaadin & Co 14
D Datenbankanbindung mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 5
P Spring JPA Query zusammensetzen Frameworks - Spring, Play, Blade, Vaadin & Co 2
S Spring Data data.sql SQL Insert mit single quote Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring Data Hibernate mehrfache Suchkriterien Frameworks - Spring, Play, Blade, Vaadin & Co 5
NicoDeluxe Spring Boot Microservices und Entitäten Frameworks - Spring, Play, Blade, Vaadin & Co 5
T Spring Thymeleaf Argumente Frameworks - Spring, Play, Blade, Vaadin & Co 9
J Spring data JPA Query Frameworks - Spring, Play, Blade, Vaadin & Co 2
N Spring Boot javax.mail Frameworks - Spring, Play, Blade, Vaadin & Co 2
B Spring tools security mit JSP Frameworks - Spring, Play, Blade, Vaadin & Co 6
NicoDeluxe Spring Boot: Logfiles wie organisieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
NicoDeluxe Spring Boot GET Frameworks - Spring, Play, Blade, Vaadin & Co 4
J Spring Boot + Swagger - XML Example Values fehlerhaft Frameworks - Spring, Play, Blade, Vaadin & Co 4
NicoDeluxe Spring Boot statt JavaEE Frameworks - Spring, Play, Blade, Vaadin & Co 65
L Spring JPA Klasse wie definieren? Frameworks - Spring, Play, Blade, Vaadin & Co 0
O OAuth mit Spring Boot Frameworks - Spring, Play, Blade, Vaadin & Co 3
D Spring Boot Controller kann nicht bei jedem Request erreicht werden Frameworks - Spring, Play, Blade, Vaadin & Co 7
L Spring Boot mit Rest, JPA und Frontend Frameworks - Spring, Play, Blade, Vaadin & Co 15

Ähnliche Java Themen

Anzeige

Neue Themen


Oben