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) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...
随机推荐
- secureCRT的一些小知识
secureCRT 是一个非常不错的终端软件,在嵌入式开发过程中经常使用到,所以了解一下其快捷键操作是非常有必要的,可以提高开发效率. 0.在secureCRT里切换不同的窗口:ctrl+tab. ...
- 第三个Sprint冲刺第九天
讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:做最后的工作
- Entity Framework search sequnce
sql express, then (LocalDb)\v11.0 (LocalDb)\mssqllocaldb sqllocaldb i could list all the local db i ...
- Swift 编程语言自己实践 -自己在Xcode6 动手写20140603
Swift 是什么,大家都回去百度或者Google,有的甚至认为是Taylor Swift(她是我的偶像),但是如果今天在百度百科里搜索绝对没有说是Apple最新推出的编程语言,因为是在2014年6月 ...
- Java用户线程和守护线程
今天看Java一个关于多线程返回值方式的示例,发现一个自己不太能理解的问题,就是在主线程中启动了几个工作线程,主线程中也没有join,工作线程居然也是正常输出了回调的结果.这个跟linux C++下的 ...
- Sublime Text2 快捷键汇总
一个好的编辑器,能大大提高编程的效率.如果能熟知软件的快捷键,那更能让你得心印手.这些内容都是我网上和自己实际使用过程中所收集而来的,在网络上应该也算比较全面的了吧.欢迎大家补充,我也会在以后慢慢添加 ...
- ajax 页面加载
大体说说思路,不上代码了: 1.点击加载更多-> ajax向后台传参(当前页page,必须有默认1,其他需要的参数...) 2.后台接收 -> 查询数据 处理形成 json数据 给前台 3 ...
- 笔记 进程(processes)
进程:a program in execution(执行中的程序) 进程包括通过程序计数器(program counter)的值和处理器寄存器(processor's registers)的内容来表示 ...
- php 上传大文件配置upload_max_filesize和post_max_size选项
php 上传大文件配置upload_max_filesize和post_max_size选项 (2014-04-29 14:42:11) 转载▼ 标签: php.ini upload _files[f ...
- spring4.2.3+mybatis+spring-security配置文件
1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...