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, "模块序列号已经存在"); } } } }
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2007-07-25 .NET中调用系统程序
2007-07-25 iframe刷新父窗体