原文
https://spring.io/guides/gs/validating-form-input/
直譯
創建一個PersonForm對象
該應用程序涉及驗證用戶的姓名和年齡,因此首先您需要創建一個類來支持表單以創建人員。
src/main/java/hello/PersonForm.java
package hello;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class PersonForm {
@NotNull
@Size(min=2, max=30)
private String name;
@NotNull
@Min(18)
private Integer age;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString() {
return "Person(Name: " + this.name + ", Age: " + this.age + ")";
}
}
該PersonForm班有兩個屬性:name和age。它標有幾個標準驗證註釋:
-
@Size(min=2, max=30) 只允許長度在2到30個字符之間的名稱
-
@NotNull 將不允許null值,如果條目爲空,則爲Spring MVC生成的值
-
@Min(18) 如果年齡小於18歲,則不允許
除此之外,你還可以看到getter / setter方法name和age以及一個方便的toString()方法。
創建Web控制器
現在您已經定義了表單支持對象,現在是時候創建一個簡單的Web控制器了。
src/main/java/hello/WebController.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 {
@Override
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";
}
}
該控制器有一個GET和一個POST方法,兩者都映射到/。
該showForm方法返回form模板。它PersonForm在方法簽名中包含一個,因此模板可以將表單屬性與a關聯PersonForm。
該checkPersonFormInfo方法接受兩個參數:
personForm標記的對象,@Valid用於收集您即將構建的表單中填充的屬性。
一個bindingResult對象,以便您可以測試和檢索驗證錯誤。
您可以從綁定到PersonForm對象的表單中檢索所有屬性。在代碼中,您測試錯誤,如果是,請將用戶發送回原始form模板。在這種情況下,將顯示所有錯誤屬性。
如果所有人的屬性都有效,則它會將瀏覽器重定向到最終results模板。
構建HTML前端
現在,您構建“主”頁面。
src/main/resources/templates/form.html
<html>
<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>
該頁面包含一個簡單的表單,每個字段位於表的單獨插槽中。表格適合發佈/。它被標記爲由personForm您在Web控制器中的GET方法中看到的對象備份。這被稱爲bean支持的形式。有兩個領域的PersonForm豆,你可以看到他們的標籤和。每個字段旁邊都有一個輔助元素,用於顯示任何驗證錯誤。th:field="{name}“th:field=”{age}"
最後,您有一個提交按鈕。通常,如果用戶輸入違反@Valid約束的名稱或年齡,它將退回到此頁面並顯示錯誤消息。如果輸入了有效的名稱和年齡,則用戶將路由到下一個網頁。
src/main/resources/templates/results.html
<html>
<body>
Congratulations! You are old enough to sign up for this site.
</body>
</html>
在這個簡單的例子中,這些網頁沒有任何複雜的CSS或JavaScript。但對於任何生產網站,瞭解如何設置網頁樣式是很有價值的。
創建一個Application類
對於此應用程序,您使用的是Thymeleaf的模板語言。此應用程序需要的不僅僅是原始HTML。
src/main/java/hello/Application.java
package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
要激活Spring MVC,通常會添加@EnableWebMvc到Application類中。但是當Spring Boot 在類路徑中@SpringBootApplication檢測到spring-webmvc時,它已經添加了這個註釋。這個相同的註釋允許它找到帶註釋的@Controller類及其方法。
Thymeleaf配置也由以下方式處理@SpringBootApplication:默認情況下,模板位於類路徑下,templates/並通過從文件名中刪除“.html”後綴來解析爲視圖。Thymeleaf設置可以根據您需要的方式以多種方式進行更改和覆蓋,但詳細信息與本指南無關。
構建可執行的JAR
您可以使用Gradle或Maven從命令行運行該應用程序。或者,您可以構建一個包含所有必需依賴項,類和資源的可執行JAR文件,並運行該文件。這使得在整個開發生命週期中,跨不同環境等將服務作爲應用程序發佈,版本和部署變得容易。
如果您使用的是Gradle,則可以使用./gradlew bootRun。或者您可以使用構建JAR文件./gradlew build。然後你可以運行JAR文件:
java -jar build / libs / gs-validating-form-input-0.1.0.jar
如果您使用的是Maven,則可以使用該應用程序運行該應用程序./mvnw spring-boot:run。或者您可以使用構建JAR文件./mvnw clean package。然後你可以運行JAR文件:
java -jar target / gs-validating-form-input-0.1.0.jar
上面的過程將創建一個可運行的JAR。您也可以選擇構建經典WAR文件。
應用程序應該在幾秒鐘內啓動並運行。
如果您訪問http:// localhost:8080 /,您應該看到如下內容:
有效01
如果您爲姓名輸入A,爲您的年齡輸入15並且點擊提交,會發生什麼?
有效02
有效03
在這裏你可以看到,因爲它違反了PersonForm類中的約束,你會被彈回“主頁”。如果單擊“輸入框中沒有任何內容提交”,則會出現其他錯誤。
有效04
如果您輸入有效的姓名和年齡,您最終會進入results頁面!
有效05
摘要
恭喜!您已經編寫了一個簡單的Web應用程序,並在域對象中內置了驗證。這樣,您可以確保數據符合特定條件,並且用戶可以正確輸入數據。
擴展知識
表單驗證
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>