Spring Boot 与 Kotlin 验证web表单信息
在做web开发的时候,我们需要验证表单,确认用户提交的信息是安全的,比如用户名不能超过多少位,密码不能少于多少位等等。
那么如何在Spring Boot 与 Kotlin中验证表单信息?
在springmvc工程中,需要检查表单信息,表单信息验证主要通过注解的形式。
表单验证
下面我们在之前《Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图》项目的基础上,增加表单验证。
build.gradle
文件增加依赖
compile "org.hibernate:hibernate-validator" compile "org.apache.tomcat.embed:tomcat-embed-el"
完整的build.gradle
文件
group 'name.quanke.kotlin' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.2.10' ext.spring_boot_version = '1.5.4.RELEASE' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath("org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version") // Kotlin整合SpringBoot的默认无参构造函数,默认把所有的类设置open类插件 classpath("org.jetbrains.kotlin:kotlin-noarg:$kotlin_version") classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlin_version") } } apply plugin: 'kotlin' apply plugin: "kotlin-spring" // See https://kotlinlang.org/docs/reference/compiler-plugins.html#kotlin-spring-compiler-plugin apply plugin: 'org.springframework.boot' jar { baseName = 'chapter11-5-5-service' version = '0.1.0' } repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" compile "org.springframework.boot:spring-boot-starter-web:$spring_boot_version" compile "org.springframework.boot:spring-boot-starter-thymeleaf:$spring_boot_version" compile "org.hibernate:hibernate-validator" compile "org.apache.tomcat.embed:tomcat-embed-el" testCompile "org.springframework.boot:spring-boot-starter-test:$spring_boot_version" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
创建UserForm类
import javax.validation.constraints.Min import javax.validation.constraints.NotNull import javax.validation.constraints.Size /** * Created by http://quanke.name on 2018/1/12. * https://stackoverflow.com/questions/36515094/kotlin-and-valid-spring-annotation * https://stonesoupprogramming.com/2017/06/21/spring-bean-validation-example-jsr-303-in-kotlin/ */ data class UserForm(@get:NotNull(message = "{name.required}") @get:Size(min = 2, max = 5,message = "{name.size}") var name: String? = "", @get:Min(18) var age: Int? = 0)
如果是Spring boot 可以不增加 @get注解,如果使用kotlin 语言实现必须加@get
这个实体类,在2个属性:name,age.它们各自有验证的注解:
- @Size(min=2, max=5) name的长度为2-30个字符
- @NotNull 不为空
- @Min(18)age不能小于18
创建WebController
import name.quanke.kotlin.chaper11_5_5.entity.UserForm import org.springframework.stereotype.Controller import org.springframework.validation.Errors 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 http://quanke.name on 2018/1/12. */ @Controller class WebController : WebMvcConfigurerAdapter() { override fun addViewControllers(registry: ViewControllerRegistry?) { registry!!.addViewController("/results").setViewName("results") } @GetMapping("/") fun index(userForm: UserForm): String { return "index" } @PostMapping("/") fun checkPersonInfo(@Valid userForm: UserForm, errors: Errors): String { val result: String = when { //Test for errors errors.hasErrors() -> "index" else -> { //Otherwise proceed to the next page "redirect:/results" } } return result } }
创建form表单src/main/resources/templates/index.html
<!DOCTYPE html> <html xmlns:th="http://www.w3.org/1999/xhtml"> <head lang="en"> <title>quanke.name</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <h1>Form</h1> <form action="#" th:action="@{/}" th:object="${userForm}" 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
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>quanke</title> </head> <body> <h1>quanke.name</h1> Congratulations! You are old enough to sign up for this site </body> </html>
在src/main/resources/
目录下增加ValidationMessages.properties
文件
# \u8FD9\u91CC\u8981\u6CE8\u610F\u7F16\u7801\u95EE\u9898 name.required=\u540D\u5B57\u4E0D\u80FD\u4E3A\u7A7A name.size=\u540D\u5B57\u957F\u5EA6\u8FD4\u56DE\u53EA\u80FD\u662F2-5
Spring Boot 启动
import org.springframework.boot.SpringApplication import org.springframework.boot.autoconfigure.SpringBootApplication /** * Created by http://quanke.name on 2018/1/9. */ @SpringBootApplication class Application fun main(args: Array<String>) { SpringApplication.run(Application::class.java, *args) }
更多Spring Boot 和 kotlin相关内容,欢迎关注《Spring Boot 与 kotlin 实战》
参考资料
- https://spring.io/guides/gs/validating-form-input/
- https://stonesoupprogramming.com/2017/06/21/spring-bean-validation-example-jsr-303-in-kotlin/
- https://stackoverflow.com/questions/36515094/kotlin-and-valid-spri
原文地址:https://my.oschina.net/quanke/blog/1610058
相关推荐
-
新年彩蛋:Spring Boot自定义Banner Java框架
2019-2-2
-
HBase查询优化之Short-Circuit Local Reads Java框架
2019-5-5
-
MyBatis快速入门(三):动态SQL Java框架
2018-3-18
-
详解intellij idea搭建SSM框架(spring+maven+mybatis+mysql+junit)(上) Java框架
2019-10-7
-
spring boot跨域处理 Java框架
2020-6-1
-
如何跳过es分页这个坑? Java框架
2020-6-1
-
在SpringBoot下的pageHelper分页实践 Java框架
2019-8-23
-
Spring Resource框架体系介绍 Java框架
2019-6-27
-
]iOS逆向实践记录-让非6s机型在SpringBoard拥有3DTouch Java框架
2020-7-4
-
spring boot 与 内存数据库Hazelcast整合 Java框架
2020-6-1