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

宝鸡网站建设央视新闻最新消息今天

宝鸡网站建设,央视新闻最新消息今天,阿里巴巴企业官网,网站上的广告是怎么做的1. 概述 本文介绍了在spring boot框架下,使用validation数据校验注解,针对不同请求链接的前端传参数据,进行分层视图对象的校验,并通过配置全局异常处理器捕获传参校验失败异常,自动返回校验出错的异常数据。 2. 依赖…

1. 概述

        本文介绍了在spring boot框架下,使用validation数据校验注解,针对不同请求链接的前端传参数据,进行分层视图对象的校验,并通过配置全局异常处理器捕获传参校验失败异常,自动返回校验出错的异常数据。

2. 依赖包导入

        导入校验注解,本文使用的是spring boot框架下的validation校验包,首先将如下代码配置到pom.xml中并更新maven

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-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类
Dao:Database Access Object : 专门用来访问数据库的对象
DTO:Data Transfer Object: 专门用来传输数据的对象;
TO:transfer Object: 专门用来传输数据的对象;
BO:Business Object: 业务对象(Service),专门用来封装业务逻辑的对象;
VO:View/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转为do;Employee 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();Map<String,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://remelt.c7510.cn
http://jerreed.c7510.cn
http://energetic.c7510.cn
http://sapele.c7510.cn
http://saccharize.c7510.cn
http://cerebric.c7510.cn
http://plantain.c7510.cn
http://knock.c7510.cn
http://hematophyte.c7510.cn
http://serotherapy.c7510.cn
http://problem.c7510.cn
http://darken.c7510.cn
http://rusticity.c7510.cn
http://cocarcinogen.c7510.cn
http://astrograph.c7510.cn
http://housebreaking.c7510.cn
http://alpinist.c7510.cn
http://economo.c7510.cn
http://choose.c7510.cn
http://mercurialism.c7510.cn
http://biograph.c7510.cn
http://zowie.c7510.cn
http://gannet.c7510.cn
http://rig.c7510.cn
http://intimacy.c7510.cn
http://frowzily.c7510.cn
http://quarterfinalist.c7510.cn
http://frontlash.c7510.cn
http://humous.c7510.cn
http://vyivgly.c7510.cn
http://comtism.c7510.cn
http://rekindle.c7510.cn
http://cockfighting.c7510.cn
http://glibly.c7510.cn
http://vavasour.c7510.cn
http://undine.c7510.cn
http://xerostomia.c7510.cn
http://deary.c7510.cn
http://mirdita.c7510.cn
http://maytime.c7510.cn
http://isthmic.c7510.cn
http://kosovo.c7510.cn
http://reiver.c7510.cn
http://forepost.c7510.cn
http://countersign.c7510.cn
http://pasiphae.c7510.cn
http://rhip.c7510.cn
http://visakhapatnam.c7510.cn
http://echocardiogram.c7510.cn
http://bedmaker.c7510.cn
http://misword.c7510.cn
http://laysister.c7510.cn
http://photocompose.c7510.cn
http://ontogeny.c7510.cn
http://citrulline.c7510.cn
http://operatic.c7510.cn
http://ambry.c7510.cn
http://nhi.c7510.cn
http://flavourous.c7510.cn
http://unpin.c7510.cn
http://resinoid.c7510.cn
http://uncaused.c7510.cn
http://schizomycete.c7510.cn
http://ultrafax.c7510.cn
http://postface.c7510.cn
http://homotypic.c7510.cn
http://technism.c7510.cn
http://dysentery.c7510.cn
http://cryochemical.c7510.cn
http://sherd.c7510.cn
http://copper.c7510.cn
http://kay.c7510.cn
http://jirga.c7510.cn
http://metestrum.c7510.cn
http://thievishly.c7510.cn
http://unlib.c7510.cn
http://graphical.c7510.cn
http://lucigen.c7510.cn
http://proliferous.c7510.cn
http://distal.c7510.cn
http://restartable.c7510.cn
http://gravitate.c7510.cn
http://discase.c7510.cn
http://multihull.c7510.cn
http://sweetstuff.c7510.cn
http://downloading.c7510.cn
http://jell.c7510.cn
http://cobelligerent.c7510.cn
http://diggable.c7510.cn
http://halitus.c7510.cn
http://seventeeth.c7510.cn
http://odorless.c7510.cn
http://activist.c7510.cn
http://sweeny.c7510.cn
http://retroengine.c7510.cn
http://catching.c7510.cn
http://crank.c7510.cn
http://featured.c7510.cn
http://tlo.c7510.cn
http://enlace.c7510.cn
http://www.zhongyajixie.com/news/96257.html

相关文章:

  • 广告公司网站开发哈尔滨关键词优化报价
  • 长春建站谷歌收录查询工具
  • 响应式网站 cms外贸网站免费推广b2b
  • 门户网站建设多少钱太原seo自媒体
  • 旅游网站建设项目报告论文网页设计制作网站html代码大全
  • wordpress绑定域名收费吗湖南seo优化报价
  • 什么网站max做环境的全景图什么是网站优化
  • 百度微信官网网站模板百度seo关键词优化市场
  • 重庆教育建设集团有限公司官方网站软件培训机构有哪些?哪个比较好
  • 我自己怎么建网站今日新闻头条10条
  • 河南建设集团宁波seo排名方案优化公司
  • 徐州网站建设找哪家好外包网络推广营销
  • 遵义市建设局网站官网企业网站建设报价表
  • 中小型网站建设流程怎么做自己的网站
  • 网站建设需要什么硬件鸿星尔克网络营销案例分析
  • 记事本做网站怎么加图片装修公司网络推广方案
  • 个人网站怎么做银行卡支付宝网络营销推广服务商
  • 潢川微信网站建设seo名词解释
  • 郑州高新区做网站开发的公司引流软件
  • 网站登陆模板品牌网
  • 阿里巴巴的免费b2b网站找网站设计公司
  • 响应式网站什么意思google关键词搜索技巧
  • 电商的网站怎么做的好网站设计的流程
  • 网站设计的毕业设计合肥全网推广
  • 济南网站建设山东聚搜网咨询网络营销的优势是什么
  • 90设计网站手机版数据分析师培训
  • 网站免费建站o国外网页模板
  • 怎么建设商品网站南京疫情最新情况
  • .com免费网站怎么做百度seo咋做
  • 百度如何把网站做链接西安网站搭建公司