一、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. re模块详解

    #!/usr/bin/env python #-*- coding:UTF-8 -*- ##################################################### # ...

  2. JAVA EE的十三种技术

    java ee 的十三中技术 一.jdbc 1). jdbc-odbc桥 2). jdbc-native 驱动桥 3). jdbc-network 桥 4). 纯java驱动 二. java命令和目录 ...

  3. 原生js实现滚动条

    var SimulateScroll = (function(){ var oParent = document.getElementById('wrap-scroll-bar'), oBox = d ...

  4. 利用jQuery和CSS实现环形进度条

    实现原理 原理非常的简单,在这个方案中,最主要使用了CSS3的transform中的rotate和CSS3的clip两个属性.用他们来实现半圆和旋转效果. 半环的实现 先来看其结构. HTML < ...

  5. 手动创建Spring项目 Spring framework

    之前学习框架一直是看的视频教程,并且在都配套有项目源码,跟着视频敲代码总是很简单,现在想深入了解,自己从官网下载文件手动搭建,就遇到了很多问题记载如下. 首先熟悉一下spring的官方网站:http: ...

  6. 2-Spark高级数据分析-第二章 用Scala和Spark进行数据分析

    数据清洗时数据科学项目的第一步,往往也是最重要的一步. 本章主要做数据统计(总数.最大值.最小值.平均值.标准偏差)和判断记录匹配程度. Spark编程模型 编写Spark程序通常包括一系列相关步骤: ...

  7. oracle查询一个时间段每天的数据量

    1.需求: 从所有数据中,查出一个时间段中每天的数据量,即:按日做汇总. 2.SQL语句模板: select trunc(date_col) date, sum(num_col) num, count ...

  8. asd

    弹出输入提示框 :window.prompt(); 24. 指定当前显示链接的位置 :window.location.href="URL" 25. 取出窗体中的所有表单的数量 :d ...

  9. JavaScript模块化编程

    为什么模块化很重要?因为有了模块,我们就可以更方便的使用别人的代码,想要什么功能,就加载什么模块. 万事都有规矩,就是规范化! 目前,通行的Javascript模块规范有两种: CommonJS和AM ...

  10. web安全之sqlload_file()和into outfile()

    load_file() 条件:要有file_priv权限 知道文件的绝对路径 能使用union 对web目录有读权限 如果过滤啦单引号,则可以将函数中的字符进行hex编码 步骤: 1.读/etc/in ...