详解SpringBoot构建的Web项目如何在服务端校验表单输入

网友投稿 196 2023-06-05

详解SpringBoot构建的Web项目如何在服务端校验表单输入

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

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

xmlns:xsi="http://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

xmlns:xsi="http://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 jknvLhOjyabindingResult) {

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

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

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

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot实现接口数据的加解密功能
下一篇:SpringBoot逻辑异常统一处理方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~