我们在做Form表单提交的时候,只在前端做数据校验是不够安全的,所以有时候我们需要在后端同样做数据的校验。此处使用Valid接口的实现类做数据校验。

需要注意的是:@Valid要紧挨着JavaBean,要不然不会生效的。

完整示例代码:

maven:

 <!--Valid校验--><dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId><version>1.1.0.Final</version></dependency><dependency><groupId>org.apache.bval</groupId><artifactId>bval-jsr303</artifactId><version>0.5</version></dependency>

Validator校验:

import com.ytx.common.RegexUtils;
import com.ytx.inlife.buyer.address.Address;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;/*** 新建收货地址校验器** @author **/
public class AddressRequestValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {return Address.class.equals(clazz);}@Overridepublic void validate(Object target, Errors errors) {ValidationUtils.rejectIfEmpty(errors, "provinceCode", null, "provinceCode 省份编码不能为空");ValidationUtils.rejectIfEmpty(errors, "cityCode", null, "cityCode 城市编码不能为空");ValidationUtils.rejectIfEmpty(errors, "areaCode", null, "areaCode 地区编码不能为空");ValidationUtils.rejectIfEmpty(errors, "address", null,"address 地址不能为空");ValidationUtils.rejectIfEmpty(errors, "doorNumber", null,"doorNumber 门牌号不能为空");ValidationUtils.rejectIfEmpty(errors, "longitude", null,"longitude 经度不能为空");ValidationUtils.rejectIfEmpty(errors, "latitude", null,"latitude 纬度不能为空");ValidationUtils.rejectIfEmpty(errors, "consignee",null, "consignee 收货人姓名不能为空");ValidationUtils.rejectIfEmpty(errors, "mobile", null,"mobile 手机号不能为空");Address address = (Address) target;if (!RegexUtils.checkMySqlDefaultSupportCharacter(address.getAddress())) {errors.rejectValue("address",null,"地址存在非法字符,请重新输入");}if (address.getConsignee().length() > 20) {errors.rejectValue("consignee",null, "收货人姓名过长,请重新输入");}if (!RegexUtils.checkMobile(address.getMobile())) {errors.rejectValue("mobile", null, "非法手机号码,请重新输入");}}
}

controller层--->绑定校验:

@InitBinderfun initBinder(binder: WebDataBinder) {binder.addValidators(AddressRequestValidator())}

mapping映射:

/***  保存 或者修改  买家收货地址*  @param account   用户信息*  @param address   地址信息*  @param isDefault 是否设为默认地址**  @return 结果集*/@PostMapping(value = ["/save"])@ApiMethod(id = "save", summary = "save", description = "用户新建收货地址")fun save(@AuthenticationPrincipal account: Account,@ApiQueryParam(name = "address", description = "地址对象") @RequestBody @Valid  address: Address,bindingResult: BindingResult,@ApiQueryParam(name = "isDefault", description = "是否设为默认地址", required = false) @RequestParam(value = "isDefault", required = false)isDefault: Boolean?): YTXResponse {val result = YTXResponse.success()//校验for (objectError in bindingResult.allErrors) {//result.message = objectError.getDefaultMessage()result.message = objectError.defaultMessageresult.success = YTXResponse.SuccessFlag.FALSE.toString()return result}if (address.id != null) {val oldAddress = addressManager.findOne(address.id!!)if (oldAddress != null && oldAddress.accountId != account.id) {logger.error(mobileErrors.message("Y12282-004"))result.message = "用户验证失败"result.success = YTXResponse.SuccessFlag.FALSE.toString()return result}}
....

@Valid对页面传参的校验问题相关推荐

  1. uniapp页面传参使用encodeURIComponent转义特殊符号

    答主在uniapp页面跳转传imgUrl(地址为:https://metting.oss-cn-beijing.aliyuncs.com/20210615153312771.9AT5NO.jpg?Ex ...

  2. AngularJS中页面传参方法

    1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...

  3. vue页面传参(多个参数传值)与接参 - 代码篇

    index.js路由规则设定: /searchResult/syyName=:syyName 发送页面: //传参页面 this.$router.push({name: 'SearchResult', ...

  4. Strut2页面传参跳转 --Struts2

    1.本案例借助struts2框架,完成页面传参.跳转功能 2.代码实现 index.jsp: <form action="helloStruts2.action" metho ...

  5. angularjs跨页面传参遇到的一些问题

    上周写课程选择时间功能时需要将课程ID,星期,节次等参数传递给下一个页面,就查了查angularjs的ui-router跨页面传参,一开始是这样写的: 在app.js下添加 params:{'args ...

  6. 通过URL在前端页面传参的方法

    通过URL在前端页面传参的方法 整个过程实例 在HTML页面a.html中:参数写入URL function detail(goods_id){window.location.href="h ...

  7. 微信小程序使用onfire.js(事件订阅和分发JavaScript 库)实现跨页面传参,对onfire的全面了解

    开发微信小程序时,页面间数据传送多采用URL方式传参.添加全局变量,对于在本地缓存不大实用(感觉操作缓存,应该性能会有一定的损耗吧).而从新打开的页面回到之前的界面,貌似只有放在本地缓存.添加全局变量 ...

  8. VUE 页面传参、页面跳转

    方案一:query参数传递 1.router定义 routes: [{path: '/soft',name: '软件详情',component: PannelContent}, ] 2.页面参数接收 ...

  9. 关于uni-app中app页面传参及跳转的问题

    由于是第一次接触这个,很多东西需要摸索,废话不多说直接上重点. 我想实现页面b编写完成保存后跳转回页面a,a页面局部刷新并且控件赋值. 那么这就牵扯到页面传参的问题了,可我在网上翻了各种资料,90%都 ...

最新文章

  1. Get/POST方法提交的长度限制
  2. 如何oracle数据库用户名和密码,Oracle数据库用户名及密码查询
  3. 认识JVM--第一篇-对象分配&回收算法
  4. java 面试题 由浅入深_面试官由浅入深的面试套路
  5. CloudStack4.10+GlusterFS4.10测试
  6. list所有元素相加 python_什么是序列,Python序列详解(包括序列类型和常用操作)...
  7. 视觉SLAM十四讲 安装OpenCV
  8. 可依简易无需数据库影视源码
  9. yolov3选取正负样本
  10. 3dmax报错信息大全,最全解决方案来了
  11. Win10电脑版微信来消息提醒工具
  12. 活性基因免疫靶向细胞疗法
  13. 从零开始搭建公司域环境(二):服务器安装域控并实现客户端加域登陆
  14. Fedora23安装有道词典
  15. 【工具分享】如何识别手机里偷数据的那些软件(适用于安卓平台)
  16. java集合举例_菜鸟程序员都能听得懂得Java集合介绍,快来收藏
  17. 求求你了,不要再浪费抗原了!!!
  18. 中国是时候在东亚做老大了?
  19. FPGA入门系列12--RAM的使用
  20. 阿里云大学安全课程-阿里云首席安全研究员吴瀚清:WannaCry事件最“细思恐极“的一个事实是?

热门文章

  1. 用前端技术实现2d动画和特效(canvas)
  2. 微信公众号开发——微信支付踩坑小记
  3. java 7 锁优化_自Java 6/Java 7开始,Java虚拟机对内部锁的实现进行了一些优化。这些优化主要包括锁消除(Lock Elision)、锁粗化(Lock Coarse...
  4. 帆软函数:阿拉伯数字转中文、阿拉伯数字转人民币大写
  5. MySQL按照字符排序,英文,中文,数字综合排序
  6. 南京数海文化传媒有限公司官网上线 | LTD文化传媒行业案例分享
  7. BFC是什么?BFC可以做什么?
  8. 算法工程师也有35岁危机吗?
  9. 【吐槽大会】互联网大厂秋招版
  10. FastBond智能可穿戴之智能手表原型设计(MAX32660+SHT40+ADXL345+OLED+RTC)