中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解SpringBoot構建的Web項目如何在服務端校驗表單輸入

發布時間:2020-10-16 06:42:23 來源:腳本之家 閱讀:144 作者:阿杜 欄目:編程語言

這個例子用于演示在Spring Boot應用中如何驗證Web 應用的輸入,我們將會建立一個簡單的Spring MVC應用,來讀取用戶輸入并使用validation注解來檢查,并且當用戶輸入錯誤時,應用需要再屏幕上顯示錯誤信息提示用戶重新輸入。

首先構建Maven項目,該項目的pom文件內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>validating-form-input</artifactId>
  <version>1.0-SNAPSHOT</version>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.1.RELEASE</version>
  </parent>

  <properties>
    <java.version>1.8</java.version>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <!-- thymeleaf模板,用于前段渲染 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- 用于輸入驗證 -->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
    </dependency>

    <!-- 用于支持嵌入式tomcat -->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-el</artifactId>
    </dependency>

    <!-- 用于spring boot應用的測試 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

Spring Boot Maven插件提供了很多方便的特性:

  • 它將該項目中需要的各個Jar包收集起來,并打包成可直接運行的Jar包,以更方便得部署和傳輸;
  • 它會搜索包含“public static void main()”方法的類,該類就是可運行Jar包的啟動類;
  • 它提供了內在的支持,去匹配Spring Boot的版本號。

Form對象

創建一個Form對象,用于對應HTML頁面中輸入的對象——PersonForm,

package hello;

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

/**
 * Created by IntelliJ IDEA.
 * User: duqi
 * Date: 2017/2/28
 * Time: 21:53
 */
public class PersonForm {

  @NotNull
  @Size(min = 2, max = 30)
  private String name;

  @NotNull
  @Min(18)
  private Integer age;

  public String getName() {
    return name;
  }

  public Integer getAge() {
    return age;
  }

  public void setName(String name) {
    this.name = name;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public String toString() {
    return "Person(Name: " + this.name + ", Age: " + this.age + ")";
  }
}

在這里,@NotNull注解表示該屬性不能為空、@Size(min=2, max=30)表示name屬性的長度在[2,30]之間,@Min(18)表示age屬性最小值為18。

web控制器

編寫一個web控制器,引用為:src/main/java/hello/WebController.java,代碼如下:

package hello;

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.WebMvcConfigurerAdapter;

import javax.validation.Valid;

/**
 * Created by IntelliJ IDEA.
 * User: duqi
 * Date: 2017/3/2
 * Time: 14:07
 */
@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";
  }
}

在這個控制器中,GET方法和POST方法都映射到“/”url下,showForm方法會返回“form”字符串,表示模板的名稱,視圖控制器根據這個字符串查找模板文件form.html,在showForm的方法簽名中定義了PersonForm參數,以便模板將屬性綁定到PersonForm對象的屬性中,checkPersonFormInfo方法定義了兩個入參:(1)person對象,在這個參數前用@Valid修飾,用于檢查從form頁面提交過來的屬性值;(2)bindingResult對象,用于存放@Valid注解檢查的結果。

可以從PersonForm表格中提取屬性值,并存入PersonForm對象。@Valid注解會檢查這些屬性的有效性,如果有錯也會把錯誤信息渲染到模板中并顯示到頁面上。

如果所有的屬性都通過校驗,該方法會將瀏覽器重定向到results頁面。

構建thymeleaf頁面

spring boot默認從src/main/resources/templates目錄下查找html頁面,form.html和results.html都放在這里。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <title>Spring Boot Thymeleaf Hello World Example</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</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>

form.html頁面包含一個簡單的form表格,這個表格和post方法綁定。th:object表示該表格和后端的person對象綁定,這就是bean-backed form,在PersonForm對象中,可以看到th:field="*{name}"和th:field=*{age}。在form表格中,緊挨著name和age標簽,有兩個用于顯示錯誤信息的標簽。頁面的最后有個Submit按鈕,如果用戶輸入的name和age不合法,頁面會顯示錯誤提示信息,如果用戶輸入的name和age不合法,頁面會被路由到下一個頁面。

results.html內容如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8" />
  <title>Title</title>
</head>
<body>
  Congratulations! You are old enough to sign up for this site.
</body>
</html>

創建程序啟動類

創建一個Application類,用于啟動Spring Boot應用,

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Created by IntelliJ IDEA.
 * User: duqi
 * Date: 2017/3/2
 * Time: 15:50
 */
@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}

@SpringBootApplication注解也為Thymeleaf提供了默認配置:默認情況下會從resources/templates目錄下查找模板文件,并將*.html文件中的后綴忽略掉后剩下的文件名稱解析為視圖。可以通過在application.properties里設置相關屬性來修改Thymeleaf的配置,這里我們不再細說。

演示的代碼:https://github.com/duqicauc/validatingforminput

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平乐县| 牙克石市| 方正县| 宣城市| 洪洞县| 怀柔区| 日喀则市| 北碚区| 泊头市| 赤水市| 鹤岗市| 邵阳市| 彝良县| 长白| 阳城县| 望江县| 重庆市| 辛集市| 喀喇沁旗| 荣成市| 建阳市| 靖江市| 吉水县| 新宁县| 宝兴县| 新丰县| 灵宝市| 木兰县| 铜川市| 商水县| 鹤岗市| 昭苏县| 栾川县| 高密市| 杭锦后旗| 城市| 隆回县| 固安县| 龙海市| 海原县| 报价|