目录
1.JSR-303说明
springmvc参数转换后获得一个JavaPojo,然后进入参数验证阶段。流程参考SpringBoot学习5.1-SpringMVC流程。
springmvc支持JSR-303注解验证,通过注解标明属性的校验策略。
使用要点:
- JSR-303注解标明属性的校验策略
- @Valid开启验证
- Errors获取错误信息
2.注解标注POJO
/**用户,增加JSR-303验证*/
public class User {
@NotNull(message = "不能为空")
private String id;
@Size(min = 3, max = 10, message = "长度必须在3到10")
private String name;
@Max(value = 3, message = "最大值为3")
@Min(value = 1, message = "最小值为1")
private int sex;
@Size(min = 0, max = 100, message = "长度必须在0到100")
private String note;
@Past(message = "只能是过去的日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
@Future(message = "只能是将来的日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date fut;
@DecimalMax(value = "1000.00", message = "不能大于1000.00")
@DecimalMin(value = "0.01", message = "不能小于0.01")
private BigDecimal yue;
@Email(message = "必须符合邮箱地址格式")
private String email;
@Range(min = 1, max = 20, message = "范围必须是1到20")
private Long rang;
// setters and getters ......
}
3.控制器
注解@Valid开启验证,Errors获取错误信息。
@Controller
@RequestMapping(path = "/mvcparamvalidate")
public class MvcParamValidateController {
/**跳转mpv1*/
@RequestMapping(value = "/mpv1")
private String mpv1() {
return "mvcparamvalidate/mpv1";
}
/**
* JSR-303参数验证
* 注解@Valid开启验证,否则errors.getAllErrors()不能获取到错误信息
*/
@RequestMapping(value = "/mpv2")
@ResponseBody
private User mpv2(@Valid @RequestBody User user, Errors errors) {
List<ObjectError> errList = errors.getAllErrors();
for (ObjectError oError : errList) {
// 如果是字段错误
if (oError instanceof FieldError) {
FieldError fe = (FieldError) oError;
System.out.println(fe.getField() + "=" + fe.getRejectedValue() + ",消息=" + fe.getDefaultMessage());
} else {
System.out.println(oError.getObjectName() + ",消息=" + oError.getDefaultMessage());
}
}
return user;
}
}
4.html/js
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MPV1</title>
<script src="https://code.jquery.com/jquery-3.2.0.js">
</script>
<script type="text/javascript">
$(function() {
var params = {
id:null,
name:'z',
note:'数据验证',
sex:4,
birthday:'2020-01-01',
fut:'2019-01-01',
yue:2000,
email:'qweertrty',
rang:30
};
$("#button").click(function() {
$.post({
url : "/mvcparamvalidate/mpv2",
// 此处需要告知传递参数类型为JSON,不能缺少
contentType : "application/json",
// 将JSON转化为字符串传递
data : JSON.stringify(params),
// 成功后的方法
success : function(result) {}
});
});
});
</script>
</head>
<body>
<button id="button">按钮</button>
</body>
</html>
5.测试结果
访问http://localhost:8080/mvcparamvalidate/mpv1然后点击按钮。
email=qweertrty,消息=必须符合邮箱地址格式
rang=30,消息=范围必须是1到20
id=null,消息=不能为空
name=z,消息=长度必须在3到10
birthday=Wed Jan 01 08:00:00 CST 2020,消息=只能是过去的日期
yue=2000,消息=不能大于1000.00
fut=Tue Jan 01 08:00:00 CST 2019,消息=只能是将来的日期
sex=4,消息=最大值为3
github:https://github.com/zhangyangfei/SpringBootLearn.git中的springMVC工程。