datos erróneos en el sistema va a ser restringida, por ejemplo, podría haber sido salarios, pero entrar en el "abc", originalmente edad de la persona, pero entró en 12.000. Todos estos reducirán la estabilidad del sistema. En esta sección se describe el SpringMVC verificación de datos.
1, las limitaciones ambientales
- sistema operativo win10 64 bits
- idea2018.1.5
- JDK-8u162-ventanas-x64
- spring4.2.4
2, la premisa de la restricción
- Completa basada en la anotación SpringMVC demo de https://www.jianshu.com/p/d1a84f07c98f
3, pasos
- Añadir la dependencia en pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>
- Agregue la siguiente en 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>
- Creado en los validatemessages.properties carpeta src [error en la información del archivo, y desacoplado del código], que dice lo siguiente:
account.length.notsuit=the lenght of account is not required!!
- Net.wanho.entity.User.java crea en el archivo 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 crea en la carpeta src, de la siguiente manera:
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;
}
}
- La creación de testvalidate.jsp en la carpeta web [un mensaje de error se muestra a la nueva página], que dice lo siguiente:
<%--
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>
- Crear una carpeta en un testvalidate.html web [un mensaje de error está representada por el Ajax de devolución de llamada a esta página], que dice lo siguiente:
<!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 creado en WEB-INF / página / carpeta, de la siguiente manera:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${error}
</body>
</html>
- Para iniciar Tomcat, de entrada, respectivamente, en el navegador:
http: // localhost: 8080 / testvalidate.jsp
http: // localhost: 8080 / testvalidate.html
Estos son comprobación de los datos en SpringMVC.