SpringBoot实战(九)之Validator
表单验证,是最为常见的,今天演示的是利用hibernate-validtor进行校验,有的时候,虽然前端方面通过jQuery或者require.js校验框架进行校验,可以减轻服务器的压力和改善用户体验,但是比如第三方请求接口方面也需要校验,在Controller里面套着一大堆if-elseif-else等等,两层嵌套还好,三层或者三层以上就不好了,日子久了继续嵌套,就会导致后面变得难以维护。我有一个朋友在一家国企,据他所说,他遇到的最烂代码是if-else if里面套者十几层,而且一个类的代码居然上千行,正常合理情况,当达到上千行代码就要考虑抽象继承或者多态,再设计模式了。设计模式,我不懂,只是了解,这里就不提了,后续博文会讲到设计模式的。 这里说Validator的意义在于,通过注解减少if-else等重复判断代码,从而使Java代码行数减少,因为加载类中的代码是需要时间的。代码行数减少,意味着加载时间减少,从而提高代码效率。 ? 演示示例如下: ? 一、导入maven依赖 <?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.springframework</groupId>
<artifactId>gs-validating-form-input</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.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>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
? 二、编写实体 package hello; import javax.validation.constraints.Min; javax.validation.constraints.NotNull; javax.validation.constraints.Size; public class PersonForm { @NotNull @Size(min=2,max=30) private String name; @NotNull @Min(18 Integer age; public String getName() { return this.name; } void setName(String name) { this.name = name; } Integer getAge() { return age; } setAge(Integer age) { this.age = String toString() { return "Person(Name: " + this.name + ",Age: " + this.age + ")"; } } ? 三、编写Controller java.util.List; javax.validation.Valid; org.springframework.format.FormatterRegistry; org.springframework.http.converter.HttpMessageConverter; org.springframework.stereotype.Controller; org.springframework.validation.BindingResult; org.springframework.validation.MessageCodesResolver; org.springframework.validation.Validator; org.springframework.web.bind.annotation.GetMapping; org.springframework.web.bind.annotation.PostMapping; org.springframework.web.method.support.HandlerMethodArgumentResolver; org.springframework.web.method.support.HandlerMethodReturnValueHandler; org.springframework.web.servlet.HandlerExceptionResolver; org.springframework.web.servlet.config.annotation.AsyncSupportConfigurer; org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; org.springframework.web.servlet.config.annotation.CorsRegistry; org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; org.springframework.web.servlet.config.annotation.InterceptorRegistry; org.springframework.web.servlet.config.annotation.PathMatchConfigurer; org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; org.springframework.web.servlet.config.annotation.ViewControllerRegistry; org.springframework.web.servlet.config.annotation.ViewResolverRegistry; org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Controller class WebController implements WebMvcConfigurer { @Override addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/results").setViewName("results"); } @GetMapping("/" String showForm(PersonForm personForm) { return "form"; } @PostMapping("/" String checkPersonInfo(@Valid PersonForm personForm,BindingResult bindingResult) { if (bindingResult.hasErrors()) { ; } return "/results"; } @Override void addArgumentResolvers(List<HandlerMethodArgumentResolver> arg0) { // TODO Auto-generated method stub } @Override addCorsMappings(CorsRegistry arg0) { addFormatters(FormatterRegistry arg0) { addInterceptors(InterceptorRegistry arg0) { addResourceHandlers(ResourceHandlerRegistry arg0) { void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> configureAsyncSupport(AsyncSupportConfigurer arg0) { configureContentNegotiation(ContentNegotiationConfigurer arg0) { configureDefaultServletHandling(DefaultServletHandlerConfigurer arg0) { void configureHandlerExceptionResolvers(List<HandlerExceptionResolver>void configureMessageConverters(List<HttpMessageConverter<?>> configurePathMatch(PathMatchConfigurer arg0) { configureViewResolvers(ViewResolverRegistry arg0) { void extendHandlerExceptionResolvers(List<HandlerExceptionResolver>void extendMessageConverters(List<HttpMessageConverter<?>> MessageCodesResolver getMessageCodesResolver() { TODO Auto-generated method stub null Validator getValidator() { ; } } ? ? 四、编写html代码 form.html <html xmlns:th="http://www.thymeleaf.org"> body> form action="#" th:action="@{/}" th:object="${personForm}" method="post"> table> tr> td>Name:</><input type="text" th:field="*{name}" /></td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error>Age:="*{age}" ="${#fields.hasErrors('age')}"="*{age}">Age Errorbutton ="submit">Submitbutton></form> html> ? result.html > Congratulations! You are old enough to sign up for this site. > ? 五、编写配置文件 application.properties server.port=8080
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.check-template-location=true
spring.thymeleaf.suffix=.html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.mode=HTML5
? ? 六、编写启动类 org.springframework.boot.SpringApplication; org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication Application { static void main(String[] args) throws Exception { SpringApplication.run(Application.,args); } } ? 最后运行main方法,在浏览器输入localhost:8080/ 会出现对应的表单页面,输入不合法会出现提示,表示验证成功 ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |