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) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...
随机推荐
- C++ list size()所想到的事情
effective STL 某个Item里重点提出了 list.size()是一个O(n)的效率 当时只是记下来了 后面看了csdn有人在实际工程上遇到坑了 我近来闲来无事 把STL的lis ...
- python数据结构
. 数据结构¶ .1. 深入列表¶ 链表类型有很多方法,这里是链表类型的所有方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list ...
- linux下JDK1.7安装
http://mnt.conf.blog.163.com/blog/static/115668258201210793915876/ 一.软件下载1.下载JDK(下面分别是32位系统和64位系统下的版 ...
- 工程环境搭建和网站部署(java)
我们一般访问网站的时候,都是用127.0.0.1:8080...去访问,如果想用www.shopping.com访问java网站时 需要配置C:\Windows\System32\drivers\et ...
- IOS常见异常捕获
前言:在开发APP时,我们通常都会需要捕获异常,防止应用程序突然的崩溃,防止给予用户不友好的体验.其实Objective-C的异常处理方法和JAVA的雷同,懂JAVA的朋友一看就懂.我为什么要写这篇博 ...
- Android驱动开发前的准备(四)
源代码的下载和编译 4.1 下载.编译和测试Android源代码 4.2下载和编译linux内核源代码 4.1.1 配置Android源代码下载环境 (1) 创建一个用于存放下载脚本文件的目录 # m ...
- uart启示2_异步操作的bug
发现代码中的隐藏bug真的是一件令人振奋的事情,当然也会疲倦那么一下午! 这个bug只有在一种在一个2604计数周期的一种情况下发生,所以即使是大量的仿真,未必也会发现的了,只有在以后的设计过程中,遇 ...
- C语言标准库函数(网络上copy的)
C语言标准库函数 标准io函数Standard C I/Oclearerr() clears errorsfclose() close a filefeof() true if at the end- ...
- ObjectOutputStream序列化问题
ObjectOutputStream序列化对象传输时,为了节省开销,会自动比较以前序列化过的对象,如果一致(指内存,不比较内容),则自动引用以前用过的对象,这就造成了传输到对方的对象总是第一次序列化的 ...
- FizzBuzz 问题
public class FizzBuzz { static int start = 1; static int end = 100; public static void main(String[] ...