dados errados no sistema deve ser restrito, por exemplo, poderia ter sido salários, mas entrar no "abc"; originalmente a idade da pessoa, mas entraram 12.000. Todos estes irão reduzir a estabilidade do sistema. Esta seção descreve o SpringMVC verificação de dados.
1, as restrições ambientais
- win10 sistema operativo de 64 bits
- idea2018.1.5
- jdk-8u162-windows-x64
- spring4.2.4
2, a premissa de contenção
- Completa baseada em anotações SpringMVC demo do https://www.jianshu.com/p/d1a84f07c98f
3, passos
- Adicionar dependência em pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
- Adicione a seguinte na primavera-mvc.xml:
<mvc:annotation-driven validator="validator" ></mvc:annotation-driven>
<bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--不设置则默认为classpath下的 ValidationMessages.properties -->
<property name="validationMessageSource" ref="validatemessageSource"/>
</bean>
<bean id="validatemessageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="classpath:validatemessages"/>
<property name="fileEncodings" value="utf-8"/>
<property name="cacheSeconds" value="120"/>
</bean>
- Criado nas validatemessages.properties pasta src [erro, onde as informações do arquivo, e dissociados do código], que estabelece o seguinte:
account.length.notsuit=the lenght of account is not required!!
- Net.wanho.entity.User.java criado no arquivo src
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private int id;
@Length(min=4,max = 10,message = "{account.length.notsuit}")
private String name;
@DateTimeFormat(pattern="yyyy-MM-dd")
private Date date;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public void setName(String name) {
this.name = name;
}
}
- Net.wanho.controller.ValidateController.java criado na pasta src, como segue:
import com.alibaba.fastjson.JSONObject;
import net.wanho.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.List;
@Controller
public class ValidateController {
@RequestMapping("/validate/test1")
public ModelAndView test1(@Valid User user, BindingResult bindingResult) {
List<String> errorList = new ArrayList<>();
ModelAndView modelAndView = new ModelAndView();
if (bindingResult.hasErrors()) {//有问题
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorList.add(fieldError.getDefaultMessage());
}
modelAndView.setViewName("error");
modelAndView.addObject("error", errorList);
return modelAndView;
} else {
//正确逻辑往下走
modelAndView.setViewName("success");
}
return modelAndView;
}
@RequestMapping("/validate/test2")
@ResponseBody
public JSONObject foo1(@Valid User user , BindingResult bindingResult) {
JSONObject jsonObject = new JSONObject();
List<String> errorList = new ArrayList<>();
if(bindingResult.hasErrors()){
for (FieldError fieldError : bindingResult.getFieldErrors()) {
errorList.add(fieldError.getDefaultMessage());
}
jsonObject.put("status",400);
jsonObject.put("errors",errorList);
return jsonObject;
}
jsonObject.put("status",200);
return jsonObject;
}
}
- Criando testvalidate.jsp na pasta web [uma mensagem de erro é exibida para a nova página], que estabelece o seguinte:
<%--
Created by IntelliJ IDEA.
User: zhangli
Date: 2019/11/13
Time: 11:21
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/validate/test1" method="get" id="myform">
<input type="text" value="ali" name="name" />
<input type="submit" value="提交" />
</form>
</body>
</html>
- Crie uma pasta em um testvalidate.html web [uma mensagem de erro exibida pelo retorno de chamada ajax se a esta página], que estabelece o seguinte:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="jquery-1.10.2.js"></script>
<script type="text/javascript" >
function validate(){
$.ajax({
data:{name:$("#name").val()},
dataType:"json",
type:"get",
url:"/validate/test2",
success:function (data) {
if(data.status=='400')
{
$("#errormsg").html(data.errors)
}
}
})
}
</script>
</head>
<body>
<input type="text" value="ali" name="name" id="name" />
<div id="errormsg" style="color: red"></div>
<input type="button" onclick="validate()" value="提交" />
</body>
</html>
- Error.jsp criado em / page / pasta WEB-INF, como segue:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${error}
</body>
</html>
- Iniciar tomcat, respectivamente de entrada no navegador:
HTTP: // localhost: 8080 / testvalidate.jsp
HTTP: // localhost: 8080 / testvalidate.html
Estes são os dados SpringMVC check-in.