当前位置: 首页 > news >正文

衡阳建网站技术支持 鼎维重庆网站建设专家

衡阳建网站,技术支持 鼎维重庆网站建设专家,深圳网站制作的公司,什么是门户网站1. 概述 本文介绍了在spring boot框架下#xff0c;使用validation数据校验注解#xff0c;针对不同请求链接的前端传参数据#xff0c;进行分层视图对象的校验#xff0c;并通过配置全局异常处理器捕获传参校验失败异常#xff0c;自动返回校验出错的异常数据。 2. 依赖…1. 概述 本文介绍了在spring boot框架下使用validation数据校验注解针对不同请求链接的前端传参数据进行分层视图对象的校验并通过配置全局异常处理器捕获传参校验失败异常自动返回校验出错的异常数据。 2. 依赖包导入 导入校验注解本文使用的是spring boot框架下的validation校验包首先将如下代码配置到pom.xml中并更新maven dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency 3. 校验规则注解 在java Bean中针对需要校验的属性字段编写对应的校验注解 3.1 视图对象分层的意义 对同一个数据库中同一张表进行不同操作前端传入的入参校验法则是不一样的甚至相互之间还有冲突因此针对同一个javaBean使用同一套入参数据校验是不可行的。 举个例子比如对如下java Bean数据进行新增操作和更新操作其ID字段的校验规则就完全冲突新增时要求前端不传入因为这个字段是数据库自增字段。而在更新操作时ID字段是必传字段因为是通过这个字段定位到具体要修改的那条数据。因此需要根据不同的入参需求建立分层视图对象进行分别校验。 Data public class Employee {private Long id;private String name;private Integer age;private String email;private String gender;private String address;private BigDecimal salary; } 3.2 分层对象的设计模式 设计模式单一职责 新建和修改用到的校验规则不一致 JavaBean也要分层各种xxO Pojo普通java类 DaoDatabase Access Object 专门用来访问数据库的对象 DTOData Transfer Object 专门用来传输数据的对象 TOtransfer Object 专门用来传输数据的对象 BOBusiness Object 业务对象Service专门用来封装业务逻辑的对象 VOView/Value Object 值对象视图对象专门用来封装前端数据的对象 3.3 视图对象最佳实践举例 根据如上设计模式本文分别针对新增和更新操作建立两个视图对象如下所示 新增视图对象仅供新增接口使用的入参接收对象 Data public class EmployeeAddVo {NotBlank(message 姓名不能为空)private String name;NotNull(message 年龄不能为空)Max(value 150, message 年龄不能超过150岁)Min(value 0, message 年龄不能小于0岁)private Integer age;Email(message 邮箱格式不正确)private String email;Pattern(regexp ^男|女$,message 性别只能为男或者女)private String gender;private String address;private BigDecimal salary; } 更新视图对象仅供更新接口使用的入参接收对象  Data public class EmployeeUpdateVo {NotNull(message id不能为空)private Long id;private String name;Max(value 150, message 年龄不能超过150岁)Min(value 0, message 年龄不能小于0岁)private Integer age;Email(message 邮箱格式不正确)private String email;Pattern(regexp ^男|女$,message 性别只能为男或者女)private String gender;private String address;private BigDecimal salary; } 3.4 非空校验注解混淆区分          上述注解中运用到了非空校验注解NotNull、NotEmpty、NotBlank 都是用于在数据校验中检查字段值是否为空的注解但是它们的用法和校验规则有所不同。         NotNull  (包装类型不为null)  NotNull 注解是 JSR 303 规范中定义的注解当被标注的字段值为 null 时会认为校验失败而抛出异常。该注解不能用于字符串类型的校验若要对字符串进行校验应该使用 NotBlank 或 NotEmpty 注解。 NotEmpty (集合类型长度大于0) NotEmpty 注解同样是 JSR 303 规范中定义的注解对于 CharSequence、Collection、Map 或者数组对象类型的属性进行校验校验时会检查该属性是否为 Null 或者 size()0如果是的话就会校验失败。但是对于其他类型的属性该注解无效。需要注意的是只校验空格前后的字符串如果该字符串中间只有空格不会被认为是空字符串校验不会失败。 NotBlank 字符串不为null切不为  字符串 NotBlank 注解是 Hibernate Validator 附加的注解对于字符串类型的属性进行校验校验 时会检查该属性是否为 Null 或 “” 或者只包含空格如果是的话就会校验失败。需要注意的是NotBlank 注解只能用于字符串类型的校验。   4. 校验生效注解 在controller层使用 Valid 告诉 SpringMVC 进行校验通过在入参中作用Valid注解让视图对象中各个属性的数据校验生效见如下代码 RestController CrossOrigin RequestMapping(api/v1) public class EmployeeRestController {Autowiredprivate EmployeeService employeeService;/*** 新增员工* 要求前端发送请求把员工的json放在请求体中* param employee* return*/PostMapping(/employee)public R add(RequestBody Valid EmployeeAddVo vo){//把vo转为doEmployee employee new Employee();//属性对拷BeanUtils.copyProperties(vo,employee);employeeService.saveEmp(employee);return R.ok();}/*** 修改员工* 要求前端发送请求把员工的json放在请求体中 必须携带id* param vo* return*/PutMapping(/employee)public R update(RequestBody Valid EmployeeUpdateVo vo){Employee employee new Employee();BeanUtils.copyProperties(vo,employee);employeeService.updateEmp(employee);return R.ok();}} 同时还需要配合使用BeanUtils.copyProperties方法将视图对象对拷贝到数据库对象中完成数据库的操作。 5. 失败返回处理 编写全局异常处理器统一返回校验失败提示信息。根据上述Valid注解作用于入参后如果数据校验不通过controller层会自动抛出校验不通过异常MethodArgumentNotValidException因此只需要使用全局拦截器捕获这个异常进行统一处理即可。 RestControllerAdvice // ControllerAdvice ResponseBody public class GlobalExceptionHandler {ExceptionHandler(value MethodArgumentNotValidException.class)public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e){BindingResult result e.getBindingResult();MapString,String errorsMap new HashMap();for (FieldError fieldError : result.getFieldErrors()) {// 1. 获取到属性名String field fieldError.getField();// 2. 获取到错误信息String defaultMessage fieldError.getDefaultMessage();errorsMap.put(field,defaultMessage);}return R.error(500,校验失败,errorsMap);} } 6. 最终效果展示 通过如上操作后当进行新增和更新访问请求数据校验不通过时就会出发数据校验失败异常通过全局拦截器给前端返回需要的提示的内容 新增数据校验示例 更新数据校验示例
http://www.eeditor.cn/news/120003/

相关文章:

  • 微网站二级页面怎么做洛阳做网站公司汉狮价格
  • 个人博客网站建设业务网站设计 cdc
  • 龙岗做网站公司苏州网络营销网站建设平台
  • 北京网站优化服务有限公司织梦批量修改网站源代码
  • 智能建站系统怎么更换网站模板创新的企业网站开发
  • 请人做游戏的网站英文官网建设
  • 浙江省建设局网站wordpress双击图片放大
  • 临沂网站优化互联网营销师报名入口官网
  • 网站开发语言格式化标记语言公司网站建设项目目的
  • 零食网站色调搭配怎麽做怎样做网络推广渠道
  • 公司网站怎么优化深圳建设交易集团
  • aspit网站源码带手机版xx集团门户网站建设策划方案
  • 建设部网站查询造价师证件长垣县建站塔山双喜
  • 湛江住房和城乡建设部网站免费企业官网怎么做
  • 网站备案需要把网站做好吗建英文网站费用
  • 仿淘宝商城网站开源系统做网站模板和服务器是一样的吗
  • 昆网站在哪里html个人网页设计代码
  • 做网站网站怎么赚钱用php做商城网站的设计论文
  • 响应式博客网站模板建设酒店网站ppt模板下载
  • 做论坛网站需要什么备案大连网络代运营
  • 网站怎么做搜索功能网站开发怎么自动获取位置
  • 单页网站seo阜阳做网站有吗
  • 百色建设局网站wordpress主题的安装
  • 电子商务旅游网站建设策划书学it去哪里学比较好
  • 装饰公司网站设计昆山公司网站建设电话
  • 邢台医院网站建设怎么注册一个企业邮箱
  • 温州营销网站公司哪家好篮球网站建设目标
  • 手机音乐网站程序源码南京触屏网站开发
  • html 旅游网站三维动画制作
  • 如何做网站详细步骤图搭建 网站 实例