如何 在服务器 修改 表单,Spring Boot构建的Web项目如何在服务端校验表单输入

这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使用validation注解来检查,并且当用户输入错误时,应用需要再屏幕上显示错误信息提示用户重新输入。

首先构建Maven项目,该项目的pom文件内容如下:

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

4.0.0

org.example

validating-form-input

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.5.1.RELEASE

1.8

org.springframework.boot

spring-boot-maven-plugin

org.springframework.boot

spring-boot-starter-thymeleaf

org.hibernate

hibernate-validator

org.apache.tomcat.embed

tomcat-embed-el

org.springframework.boot

spring-boot-starter-test

test

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都放在这里。

Spring Boot Thymeleaf Hello World Example
Name:Name Error
Age:Age Error
Submit

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内容如下:

Title

Congratulations! You are old enough to sign up for this site.

创建程序启动类

创建一个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的配置,这里我们不再细说。

Spring Boot 1.x系列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值