這篇文篇主要簡述如何在springboot中驗證表單信息。在springmvc工程中,需要檢查表單信息狡门,表單信息驗證主要通過注解的形式瑟押。
構建工程
創(chuàng)建一個springboot工程搀捷,由于用到了 web 、thymeleaf多望、validator嫩舟、el,引入相應的起步依賴和依賴怀偷,代碼清單如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
</dependencies>
創(chuàng)建一個PresonForm的Object類
package com.forezp.entity;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* Created by fangzhipeng on 2017/4/19.
*/
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 + ")";
? ? }
}
這個實體類家厌,在2個屬性:name,age.它們各自有驗證的注解:
@Size(min=2, max=30) name的長度為2-30個字符
@NotNull 不為空
@Min(18)age不能小于18
創(chuàng)建 web Controller
@Controller
public class WebController extends WebMvcConfigurerAdapter {
? ? @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";
? ? }
}
創(chuàng)建form表單
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>
注冊成功的頁面
src/main/resources/templates/results.html:
<html>
<body>
Congratulations! You are old enough to sign up for this site.
</body>
</html>
演示
啟動工程,訪問http://localhost:8080/:
如果你輸入A和15椎工,點擊 submit:
如果name 輸入N, age為空:
如果輸入:forezp. 18