<meta http-equiv="content-type"
content="text/html;charset=UTF-8" />
</head>
<body>
<form action="member_add" method="post">
用户邮箱:<input type="text" name="mid" value="gwolf_2010@126.com"/><br />
用户年龄:<input type="text" name="age" value="16"/><br />
用户工资:<input type="text" name="salary" value="566555.3"/><br />
用户生日:<input type="text" name="birthday" value="2010-10-10"/><br />
<input type="submit" value="表单提交"/>
<input type="submit" value="重置"/>
</form>
</body>
</html>

5、现在访问地址:http://localhost:8080/member_add_pre。

6、此时的代码只是一个最为普通的处理操作,但是这个时候对于该程序也是存在有如下问题的。
1、如果某些数据没有输入,则内容为null,如果要进行严格控制,这些null不应该存在。
2、某些数据需要进行格式验证,例如:用户名应该是邮箱,这个信息应该进行邮箱验证。
所以现在如果要想进行这些验证,springboot里面有默认的支持,只不过这种支持未必是最好的,在springboot里面为了方便用户编写验证,专门提供有一个hibernate-validation.jar工具包,这个工具包是有hibernate开发框架提供的。

7、如果要想进行验证,那么首先要解决的问题必须是错误的提示信息问题,而在springboot里面对于错误信息的保存,都要求其保存在ValidationMessages.properties文件里面,在“src/main/resouces”目录中建立此文件;

8、一个表单就需要编写这么多的配置项, 那么如果要有几百个表单呢?这样的配置项太可怕了,所以最好的数据检测还是利用拦截器处理最合适。
修改Member.java程序类,追加验证的处理方式:
package com.gwolf.vo;
import org.hibernate.validator.constraints.Email;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;
import java.util.Date;
public class Member implements java.io.Serializable{
@NotNull(message = "{member.mid.notnul}")
@Email(message = "{member.mid.email.error}")
private String mid;
private String name;
@NotNull(message = "{member.age.notnull.error}")
@Digits(message = "{member.age.digits.error}",integer = 3,fraction = 0)
private Integer age;
private Date birthday;
private Double salary;
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Member{" +
"mid=" + mid +
", name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
", salary=" + salary +
'}';
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
}

9、修改MemberController类中的add()方法来观察错误信息的显示:
package com.gwolf.controller;
import com.gwolf.util.controller.AbstractBaseController;
import com.gwolf.vo.Member;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.validation.Valid;
import java.util.Iterator;
@Controller
public class MemberController extends AbstractBaseController{
@RequestMapping(value="/member_add_pre", method = RequestMethod.GET)
public String memberAddPre() {
return "member_add";
}
@RequestMapping(value="/member_add", method = RequestMethod.POST)
@ResponseBody
public Object memberAdd(@Valid Member member, BindingResult result) {
if(result.hasErrors()) {
Iterator<ObjectError> iterator = result.getAllErrors().iterator();
while (iterator.hasNext()) {
ObjectError objectError = iterator.next();
System.out.println("[错误信息]" + objectError.getCode() + ","
+ objectError.getDefaultMessage());
}
return result.getAllErrors();
} else {
return member;
}
}
}
