spring mvc 4 校验
一、controller中添加:
@Resource
GatewayValidator gatewayValidator;
@RequestMapping(value = "/gateway/signup", method = RequestMethod.POST)
public ApiResponse signup(@Valid Gateway gateway, BindingResult result) {
ApiResponse rspResult = new ApiResponse();
gatewayValidator.validate(gateway, result);
if(result.hasErrors()){
rspResult.setCode(ApiCode.PARMAS_ERROR);
rspResult.setMessage(BaseUtils.GetValidErrorMessage(result));
}
else {
//do something
}
return rspResult;
}
二、model中添加(简单的校验可以直接卸载model类中):
package smarthome.api.models;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
import org.hibernate.validator.constraints.NotEmpty; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; public class Gateway extends BaseClass implements Serializable { /**
* None
*/
protected String vendorCode;
/**
* None
*/
protected String productCode;
/**
* None
*/
@NotEmpty(message = "序列号不能为空")
protected String serialNumber; public Gateway() {
} public String getVendorCode() {
return vendorCode;
}
public void setVendorCode(String vendorCode) {
this.vendorCode = vendorCode == null ? null : vendorCode.trim();
} public String getProductCode() {
return productCode;
}
public void setProductCode(String productCode) {
this.productCode = productCode == null ? null : productCode.trim();
} public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber == null ? null : serialNumber.trim();
}
}
三、简单的校验
package smarthome.api.validators; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator; import javax.annotation.Resource;
import java.util.List; @Component
public class GatewayValidator implements Validator {
public boolean supports(Class clazz) {
return Gateway.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
Gateway gateway = (Gateway) target;
if(gateway.getGatewayId() == null && StringUtils.isEmpty(gateway.getSerialNumber())){
errors.rejectValue("gatewayId", null, "网关编号和序列号不能同时为空");
errors.rejectValue("serialNumber", null, "网关编号和序列号不能同时为空");
}
}
}
四、嵌套的校验
1、父类(gateway)中添加校验
package smarthome.api.validators; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator; import javax.annotation.Resource;
import java.util.List; @Component
public class GatewayValidator implements Validator {
@Resource
private ModuleValidator moduleValidator;
public boolean supports(Class clazz) {
return Gateway.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
Gateway gateway = (Gateway) target;
if(gateway.getGatewayId() == null && StringUtils.isEmpty(gateway.getSerialNumber())){
errors.rejectValue("gatewayId", null, "网关编号和序列号不能同时为空");
errors.rejectValue("serialNumber", null, "网关编号和序列号不能同时为空");
}
for(Module module : (List<Module>)gateway.getModuleList()){
ValidationUtils.invokeValidator(moduleValidator, module, errors);
}
}
}
2、子类(module)中的校验
package smarthome.api.validators; import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator; import javax.annotation.Resource; @Component
public class ModuleValidator implements Validator {
@Resource
private IModuleService moduleService;
public boolean supports(Class clazz) {
return Module.class.equals(clazz);
}
public void validate(Object target, Errors errors) {
Module module = (Module) target;
if (StringUtils.isEmpty(module.getSerialNumber())) {
errors.rejectValue("serialNumber", null, "模块序号不能为空");
}
else {
if(moduleService.getFirst(module.getSerialNumber()) != null){
errors.rejectValue("serialNumber", null, "模块序列号已经存在");
}
}
}
}
spring mvc 4 校验的更多相关文章
- Java Web 学习(6) —— Spring MVC 之校验器
Spring MVC 之校验器 数据验证 一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators. 在调用 controller 期间 ...
- spring mvc 数据校验(bean实体注解实现)
spring mvc 数据校验 1.添加个jar (jar与一版本会冲突) <dependency> <groupId>com.fasterxml</groupId> ...
- Spring MVC 数据校验@Valid
先看看几个关键词 @Valid @Pattern @NotNull @NotBlank @Size BindingResult 这些就是Spring MVC的数据校验的几个注解. 那怎么用呢?往下看 ...
- JSR教程2——Spring MVC数据校验与国际化
SpringMVC数据校验采用JSR-303校验. • Spring4.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. • Spring在进行数据绑定时,可同时调用校验框架完成数据 ...
- 【代码总结】Spring MVC数据校验
1.实验介绍 --------------------------------------------------------------------------------------------- ...
- spring mvc参数校验
一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...
- Spring MVC数据校验
在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Jav ...
- spring mvc 数据校验
1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页 ...
- spring mvc 框架校验常用注解
@AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为false@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...
随机推荐
- GIT 使用文档
GIT 使用文档 git clone http://wanghaiyang:Z123456w@192.168.1.118/wanghaiyang/hdtas.git git add . //添加当前文 ...
- PHP--------TP中的ajax请求
PHP--------TP中的ajax请求 以jQuery中的ajax为例: (1)引入jQuery 通过模板替换表示路径,我们可以自定义模板替换变量(在config中定义) /*自定义模板替换标签* ...
- 将程序部署到weblogic出现乱码问题
出现错误: 将文件部署到weblogic上,在linux环境下运行程序时出现乱码问题 原因: (1)可能是linux系统的编码问题 解决办法:登陆weblogic 输入命令: cd /etc/sysc ...
- Android Studio使用教程-菜单(Edit)
3.2.1.Undo(Ctrl+Z) 撤销上一次操作 3.2.2.Redo(Ctrl+Shift+Z) 退出撤销操作 3.2.3.Cut(Ctrl+X) 剪切 3.2.4.Copy(Ctrl+C) 复 ...
- mybatis:Invalid bound statement (not found)
[常规解决办法] 如果出现: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一般的原因 ...
- windows环境下创建 .文件夹
一.windows环境下创建 .文件夹 1.新建一个文件夹 2.重命名为.properties.(名字前后都加点) 二.windows环境下创建 .文件 1.上面的方法对文件同样适用 2.运行CMD, ...
- CodeForces 239 Long Path
每个房间有两个单向出口,就是只能进不能出,这个开始理解错了. 进入房间的时候,首先要在屋顶画一个叉叉,如果画完之后叉叉的个数是奇数的话:那么就从第二条出口出去,会到达p[ i ]房间:如果叉叉的个数是 ...
- call指令的一个细节
执行下面这个程序之后,ax的值是多少? assume cs:code code segment start: call s inc ax s: pop ax mov ax, 4c00h int 21h ...
- 《C与指针》读后感
到目前为止,我已经读到了<C与指针>第十六章,总共十八章,接下来的章节内容分别是标准函数库.数据结构.以及C语言的运行环境,还没有完全做完练习就写这篇读后感原因有二,第一个当然是最主要的, ...
- 【jQuery plug-in】DataTables
1. DOM Position dataTableOption.dom = '<"top"<"pull-left"l><"pu ...