一、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 校验的更多相关文章

  1. Java Web 学习(6) —— Spring MVC 之校验器

    Spring MVC 之校验器 数据验证 一个典型的 Spring MVC 应用会同时应用到 formatters/converters 和 validators. 在调用 controller 期间 ...

  2. spring mvc 数据校验(bean实体注解实现)

    spring mvc 数据校验 1.添加个jar (jar与一版本会冲突) <dependency> <groupId>com.fasterxml</groupId> ...

  3. Spring MVC 数据校验@Valid

    先看看几个关键词 @Valid @Pattern @NotNull @NotBlank @Size BindingResult 这些就是Spring MVC的数据校验的几个注解. 那怎么用呢?往下看 ...

  4. JSR教程2——Spring MVC数据校验与国际化

    SpringMVC数据校验采用JSR-303校验. • Spring4.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. • Spring在进行数据绑定时,可同时调用校验框架完成数据 ...

  5. 【代码总结】Spring MVC数据校验

    1.实验介绍 --------------------------------------------------------------------------------------------- ...

  6. spring mvc参数校验

    一.在SringMVC中使用 使用注解 1.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate-validator-4.2.0.Fina ...

  7. Spring MVC数据校验

    在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Jav ...

  8. 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.访问页 ...

  9. spring mvc 框架校验常用注解

    @AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为false@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...

随机推荐

  1. 个人Web工具箱&资源整理(1)

    很久就想把使用的工具及收藏的资源整理一番:一是为了传达博客社区的理念:资源共享,而是方便自己及团队快速获取. 学习资源: 首推两个入门级在线参考网站. 1 w3c school. 2 Runoob.c ...

  2. iOS开发 首次启动显示用户引导,第二次启动直接进入App,UIScrollView,UIPageControl,NSUserDefaults

    首先创建一个引导图的控制器类 UserGuideViewController.h和UserGuideViewController.m #import <UIKit/UIKit.h> #im ...

  3. 项目中创建单元测试—VS2012

    我们在每个项目的开发过程中,开发完一个功能,自己首先需要测试一下,VS提供了很方便的测试功能,可以很容易的创建单元测试,但是在VS2012中类名上点击右键没有『创建单元测试』这个菜单,需要先进行设置一 ...

  4. jQuery设置元素attribute之特殊属性

    一般我们使用.attr()对某个dom元素设置attribute属性.今天在使用过程中发现在给input设置disabled属性为true时,最终元素disabled属性值解析成了disabled,并 ...

  5. Android之ProgressBar初步应用

    这里利用 ProgressBar 即时显示下载进度. 途中碰到的问题: 1.主线程中不能打开 URL,和只能在主线程中使用 Toast 等 2.子线程不能修改 UI 3.允许网络协议 4.暂停下载和继 ...

  6. 测试cookie的读写

    js文件使用utf8编码 <p><img id="img" onclick="javascript:var s=document.createEleme ...

  7. 新冲刺Sprint3(第六天)

    一.Sprint介绍 商家功能模块继续完善着,加快了工作的步伐. 二.Sprint周期 看板: 燃尽图:

  8. web安全之ssrf

    ssrf(服务器端请求伪造)原理: 攻击者构造形成由服务端发起请求的一个漏洞.把服务端当作跳板来攻击其他服务,SSRF的攻击目标一般是外网无法访问到的内网 当服务端提供了从其他服务器获取数据的功能(如 ...

  9. C# Lock 解读 (关键是理解最后一句)

    最近在研究.NET分布式缓存代码,正好涉及Lock,看了网上的文章,总结了一些Lock相关的知识,供大家一起学习参考. 一.Lock定义     lock 关键字可以用来确保代码块完成运行,而不会被其 ...

  10. jquery中的$的特殊用法

    通过父级元素选取子元素, $('父元素选择器,子元素选择器')        $('子元素选择器',父元素jquery对象); 通过$创建代码片段 $('<div/>',{ 'class' ...