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

泉州网站建站模板长春建站服务

泉州网站建站模板,长春建站服务,网站开发 培训 周末班,服务器建立网站5. 前端校验 我们在前端提交的表单数据,我们也是需要对提交的数据做相关的校验的 Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可 校验的页面效果 前端数据…

5. 前端校验

我们在前端提交的表单数据,我们也是需要对提交的数据做相关的校验的

Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可

image.png

校验的页面效果

image.png

前端数据校验就搞定了。后端校验也是不可避免的

6. 后端服务校验

6.1 JSR-303介绍

  JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

  JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
  Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。

在这里插入图片描述

Hibernate 中填充一部分

在这里插入图片描述

6.2 后端校验实现

1.需要在commons服务中添加对应的依赖

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId><version>2.4.12</version></dependency>

2.在需要校验的Bean的字段头部添加对应的注解

image.png

3.通过@Valid注解来开启JSR303的校验

image.png

4.测试,通过postman提交空的数据

image.png

当我们提交一个非空的数据是可以通过的

image.png

5.校验不合法的提示信息,在Controller中通过 BindingResult对象来获取校验的结果信息,然后解析出来后封装为R对象响应

    @RequestMapping("/save")//@RequiresPermissions("product:brand:save")public R save(@Valid @RequestBody BrandEntity brand, BindingResult result){if(result.hasErrors()){// 提交的数据经过JSR303校验后有非法的字段Map<String,String> map = new HashMap<>();List<FieldError> fieldErrors = result.getFieldErrors();for (FieldError fieldError : fieldErrors) {// 获取非法数据的 fieldString field = fieldError.getField();// 获取非法的field的提示信息String defaultMessage = fieldError.getDefaultMessage();map.put(field,defaultMessage);}return R.error(400,"提交的品牌表单数据不合法").put("data",map);}brandService.save(brand);return R.ok();}

image.png

然后完善其他字段你的校验规则

@Data
@TableName("pms_brand")
public class BrandEntity implements Serializable {private static final long serialVersionUID = 1L;/*** 品牌id*/@TableIdprivate Long brandId;/*** 品牌名*///@NotEmpty//@NotNull@NotBlank(message = "品牌的名称不能为空")private String name;/*** 品牌logo地址*/@NotBlank(message = "logo不能为空")@URL(message = "logo必须是一个合法URL地址")private String logo;/*** 介绍*/private String descript;/*** 显示状态[0-不显示;1-显示]*/private Integer showStatus;/*** 检索首字母*/@NotBlank(message = "检索首字母不能为空")@Pattern(regexp = "/^[a-zA-Z]$/",message = "检索首字母必须是单个的字母")private String firstLetter;/*** 排序*/@NotNull(message = "排序不能为null")@Min(value = 0,message = "排序不能小于0")private Integer sort;}

image.png

6.3 统一的异常处理

  在SpringMVC中的统一异常处理我们通过ControllerAdvice来处理

/*** 统一的异常处理类*/
/*@ResponseBody
@ControllerAdvice*/
@Slf4j
@RestControllerAdvice(basePackages = "com.msb.mall.product.controller")
public class ExceptionControllerAdvice {/*** 处理验证异常的方法* @param e*/@ExceptionHandler(value = MethodArgumentNotValidException.class)public R handlerValidExecption(MethodArgumentNotValidException e){Map<String,String> map = new HashMap<>();e.getFieldErrors().forEach((fieldError)->{map.put(fieldError.getField(),fieldError.getDefaultMessage());});return R.error(400,"提交的数据不合法").put("data",map);}/*** 系统其他的异常处理* @param throwable* @return*/@ExceptionHandler(Throwable.class)public R handlerExecption(Throwable throwable){log.error("错误信息:",throwable);return R.error(400,"未知异常信息").put("data",throwable.getMessage());}
}

响应编码的规制制订,因为随着后面的业务越来越复杂,我们在响应异常信息的时候尽量准确的给客户端有用的提示信息。

通用的错误列表,响应的编码统一为5位数字,前面两位约定为业务场景,最后三位约定为错误码

10:表示通用

/001:参数格式错误 10001

/002:未知异常 10002

11:商品

12:订单

13:物流

14:会员

定义对应的枚举类

package com.msb.common.exception;/*** 错误编码和错误信息的枚举类*/
public enum BizCodeEnume {UNKNOW_EXCEPTION(10000,"系统未知异常"),VALID_EXCEPTION(10001,"参数格式异常");private int code;private String msg;BizCodeEnume(int code,String msg){this.code = code;this.msg = msg;}public int getCode(){return code;}public String getMsg(){return msg;}
}

在统一异常处理中我们就可以使用通用的编码

package com.msb.mall.product.exception;import com.msb.common.exception.BizCodeEnume;
import com.msb.common.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;import java.util.HashMap;
import java.util.Map;/*** 统一的异常处理类*/
/*@ResponseBody
@ControllerAdvice*/
@Slf4j
@RestControllerAdvice(basePackages = "com.msb.mall.product.controller")
public class ExceptionControllerAdvice {/*** 处理验证异常的方法* @param e*/@ExceptionHandler(value = MethodArgumentNotValidException.class)public R handlerValidExecption(MethodArgumentNotValidException e){Map<String,String> map = new HashMap<>();e.getFieldErrors().forEach((fieldError)->{map.put(fieldError.getField(),fieldError.getDefaultMessage());});//return R.error(400,"提交的数据不合法").put("data",map);return R.error(BizCodeEnume.VALID_EXCEPTION.getCode(), BizCodeEnume.VALID_EXCEPTION.getMsg()).put("data",map);}/*** 系统其他的异常处理* @param throwable* @return*/@ExceptionHandler(Throwable.class)public R handlerExecption(Throwable throwable){log.error("错误信息:",throwable);//return R.error(400,"未知异常信息").put("data",throwable.getMessage());return R.error(BizCodeEnume.UNKNOW_EXCEPTION.getCode(), BizCodeEnume.UNKNOW_EXCEPTION.getMsg()).put("data",throwable.getMessage());}
}

image.png

6.4 分组校验

  在实际的业务场景中同一个Entity的校验可能会有不同的规则,比如添加数据品牌id必须为空,而更新数据品牌Id必须不为空,针对这种情况我们需要使用分组校验来实现

1>定义标志类

image.png

2>在Entity中指定分组规则

image.png

3>通过@Validated注解来实现分组校验

image.png

6.5 自定义校验注解

  面临特殊的校验需要我们可以通过正则表达式来处理,当然我们也可以通过自定义校验注解的方式来实现。

1> 创建自定义的校验注解

/*** 自定义的校验注解*/
@Documented
@Constraint(validatedBy = { })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
public @interface ListValue {String message() default "{com.msb.common.valid.ListValue.message}";Class<?>[] groups() default { };Class<? extends Payload>[] payload() default { };int[] val() default {};
}

对应需要创建提示信息的属性文件

image.png

2>创建一个自定义的校验器

package com.msb.common.valid;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.lang.annotation.Annotation;
import java.sql.ClientInfoStatus;
import java.util.HashSet;/*** 对应的校验注解的校验器*/
public class ListValueConstraintValidator implements ConstraintValidator<ListValue,Integer> {private HashSet<Integer> set = new HashSet<>();/*** 初始化的方法* 举例:@ListValue(val={1,0})* 获取到 1 0* @param constraintAnnotation*/@Overridepublic void initialize(ListValue constraintAnnotation) {int[] val = constraintAnnotation.val();// 0 1for (int i : val) {set.add(i);}}/*** 判断校验是否成功的方法* @param value 客户端传递的对应的属性的值 判断value是否在0 , 1 中* @param context* @return*/@Overridepublic boolean isValid(Integer value, ConstraintValidatorContext context) {return set.contains(value);}
}

3>关联自定义的校验注解和校验器

image.png


文章转载自:
http://expansionary.jjpk.cn
http://pluricellular.jjpk.cn
http://shibboleth.jjpk.cn
http://inapplication.jjpk.cn
http://butterboat.jjpk.cn
http://intraswitch.jjpk.cn
http://shellfire.jjpk.cn
http://noteworthiness.jjpk.cn
http://tetrapylon.jjpk.cn
http://inconformity.jjpk.cn
http://hamstring.jjpk.cn
http://biro.jjpk.cn
http://fabulize.jjpk.cn
http://ms.jjpk.cn
http://autonomous.jjpk.cn
http://beastliness.jjpk.cn
http://salpinges.jjpk.cn
http://hemizygote.jjpk.cn
http://deliberatively.jjpk.cn
http://osteometrical.jjpk.cn
http://numbly.jjpk.cn
http://palynology.jjpk.cn
http://cavum.jjpk.cn
http://reseau.jjpk.cn
http://domineer.jjpk.cn
http://subtilisin.jjpk.cn
http://owlish.jjpk.cn
http://absentminded.jjpk.cn
http://botryoidal.jjpk.cn
http://yewk.jjpk.cn
http://assoluta.jjpk.cn
http://rebelled.jjpk.cn
http://dicumarol.jjpk.cn
http://trainband.jjpk.cn
http://infrasound.jjpk.cn
http://webwheel.jjpk.cn
http://remembrancer.jjpk.cn
http://unspotted.jjpk.cn
http://barcelona.jjpk.cn
http://inclemency.jjpk.cn
http://hemihydrate.jjpk.cn
http://unheard.jjpk.cn
http://jampan.jjpk.cn
http://condemn.jjpk.cn
http://msee.jjpk.cn
http://parachutist.jjpk.cn
http://amon.jjpk.cn
http://norwards.jjpk.cn
http://obvert.jjpk.cn
http://mettled.jjpk.cn
http://heresimach.jjpk.cn
http://window.jjpk.cn
http://marsipobranch.jjpk.cn
http://coati.jjpk.cn
http://hyperon.jjpk.cn
http://linkman.jjpk.cn
http://pergamum.jjpk.cn
http://dividing.jjpk.cn
http://excogitation.jjpk.cn
http://fibroadenoma.jjpk.cn
http://ironhanded.jjpk.cn
http://patient.jjpk.cn
http://damningness.jjpk.cn
http://spacelift.jjpk.cn
http://coiner.jjpk.cn
http://imperviously.jjpk.cn
http://ret.jjpk.cn
http://nonverbal.jjpk.cn
http://cithaeron.jjpk.cn
http://aep.jjpk.cn
http://accede.jjpk.cn
http://weatherman.jjpk.cn
http://epicurean.jjpk.cn
http://justificatory.jjpk.cn
http://puss.jjpk.cn
http://ashpit.jjpk.cn
http://listlessly.jjpk.cn
http://amen.jjpk.cn
http://tautologize.jjpk.cn
http://conicoid.jjpk.cn
http://cleavable.jjpk.cn
http://polyphyleticism.jjpk.cn
http://litten.jjpk.cn
http://asiadollar.jjpk.cn
http://gunfignt.jjpk.cn
http://rhizome.jjpk.cn
http://circinate.jjpk.cn
http://atramentous.jjpk.cn
http://macrometeorology.jjpk.cn
http://fructicative.jjpk.cn
http://germless.jjpk.cn
http://asteria.jjpk.cn
http://louvar.jjpk.cn
http://rackabones.jjpk.cn
http://trucklingly.jjpk.cn
http://abductor.jjpk.cn
http://fundus.jjpk.cn
http://extinct.jjpk.cn
http://parrot.jjpk.cn
http://bondstone.jjpk.cn
http://www.dt0577.cn/news/85654.html

相关文章:

  • 郑州哪里有做网站阿里云免费域名
  • 张店做网站老师直播课
  • 烟台建站价格电商seo是什么意思
  • 免费头像在线制作百度关键词seo排名软件
  • 做网站不签合同抖音搜索seo
  • 辽宁沈阳做网站seo网站关键词排名提升
  • 在家做任务赚钱网站百度软件市场
  • wordpress 图标seo免费教程
  • wordpress物品展示长尾词seo排名优化
  • 网站建设技百度搜索下载app
  • wordpress建娱乐站企业推广平台
  • 动态网站设计和管理百度推广app
  • 网站之间如何做视频交换百度推广售后服务电话
  • pc网站平台数据分析培训班
  • 网站做重新做_域名不换_空间想转到新网站这边网站标题算关键词优化吗
  • 一个公司是否可以做多个网站淘宝seo排名优化
  • 网站的出站连接数网站推广优化的公司
  • 个人可以做b2b网站吗seo排名优化怎样
  • 网站推广的几个阶段百度收录站长工具
  • 地推团队去哪里找seo交流
  • 商务服饰网站建设百搜网络科技有限公司
  • iis默认网站 没有属性seo关键词软件
  • 十大免费ppt网站软件网站推广经验
  • 低价网站建设方案郑州百度推广哪家好
  • 郑州定制网站整合营销传播的定义
  • 网站开发是前端还是后端深圳互联网公司排行榜
  • 黑龙江省建设厅的网站首页上街网络推广
  • 主流网站编程语言如何在百度上做广告
  • 网站建设开发哪个好学seo搜索引擎优化实战
  • 网站备案网站如何做网站推广的策略