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

如何做一间公司的网站3d网站制作

如何做一间公司的网站,3d网站制作,建筑工程完工证明格式,杭州网站建设哪个平台好属性校验 前言Validated基础用法集合校验分组校验嵌套校验自定义校验器 源码地址 前言 在项目开发过程中#xff0c;经常遇到需要对传递的参数进行校验#xff0c;比如某个参数字段是否为空、值的取值是否在约定范围、格式是否合法等等#xff0c;最原始的写法#xff0c;… 属性校验 前言Validated基础用法集合校验分组校验嵌套校验自定义校验器 源码地址 前言 在项目开发过程中经常遇到需要对传递的参数进行校验比如某个参数字段是否为空、值的取值是否在约定范围、格式是否合法等等最原始的写法通过if判断 PostMappingpublic ResultLong save(RequestBody SystemUserDto systemUserDto) {if(systemUserDto.getUserName!null){throw new BusinessException(用户名称不能为空);}if(systemUserDto.getMobile!null){throw new BusinessException(用户电话不能为空);}if(systemUserDto.getMobile().length()11){throw new BusinessException(用户电话长度不能超过11位);}return Result.ok(id);}还有通过Spring框架提供的Assert类它能够帮助我们确保方法参数符合预期如果不符合会抛出IllegalArgumentException然后通过全局异常捕获将错误按照统一格式返给前端。 示例校验字符串非空 import org.springframework.util.Assert;public void checkString(String input) {// 校验字符串非空如果为空则抛出异常Assert.hasText(input, 输入字符串不能为空); }常用的一些方法 Assert.notNull(Object object,object is required); // 对象非空 Assert.isTrue(Object object,object must be true); // 对象必须为true Assert.notEmpty(Collection collection,collection must not be empty); // 集合不能为空 Assert.hasLength(String text,text must be specified); // 字符不为null且字符长度不为0 Assert.hasText(String text,text must not be empty); // text不为null且必须至少包含一个非空的字符 Assert.isInstanceOf(Class class, Object object,class must be of type[class]); // object必须为class指定的类最后一种就是使用Valid 注解和 Validated 注解首先我们要了解这两个注解的区别然后着重描述一下Validated 用法 1.来源不同 Validated是Spring框架特有的注解属于Spring的一部分也是JSR 303的一个变种。它提供了一些 Valid 所没有的额外功能比如分组验证。ValidJava EE提供的标准注解它是JSR 303规范的一部分主要用于Hibernate Validation等场景。 2.注解位置 Validated 用在类、方法和方法参数上但不能用于成员属性。Valid可以用在方法、构造函数、方法参数和成员属性上。 3.是否支持分组 Validated支持分组验证可以更细致地控制验证过程。此外由于它是Spring专有的因此可以更好地与Spring的其他功能如Spring的依赖注入集成。Valid主要支持标准的Bean验证功能不支持分组验证。 4.嵌套验证 Validated 不支持嵌套验证。Valid支持嵌套验证可以嵌套验证对象内部的属性。 Validated基础用法 ① 在根目录build.gradle引入校验的依赖包 springValidationVersion 3.3.2 //Validation参数校验 implementation org.springframework.boot:spring-boot-starter-validation:${springValidationVersion}② 在对象需要校验属性上添加注解比如我要验证账号不能为空 NotBlank(message 用户账号不能为空) private String username;其它类型的注解 注解验证的数据类型描述NotNull任意类型验证属性不能为nullNotBlank字符串验证字符串属性不能为空且长度必须大于0Size(min,max )CharSequenceCollectionMapArray字符串字符串长度必须在指定的范围内Collection集合大小必须在指定的范围内Mapmap的大小必须在指定的范围内Array数组长度必须在指定的范围内Min整型类型验证数字属性的最小值Max整型类型验证数字属性的最大值DecimalMin数字类型验证数字属性的最小值包括小数DecimalMax数字类型验证数字属性的最大值包括小数Digits(integer,fraction)数字类型 验证数字属性的整数位数和小数位数Email字符串类型验证字符串属性是否符合Email格式Pattern字符串验证字符串属性是否符合指定的正则表达式Positive数字类型验证数值为正数PositiveOrZero数字类型验证数值为正数或0Negative数字类型验证数值为负数NegativeOrZero数字类型验证数值为负数或0AssertTrue布尔类型参数值必须为 trueAssertFalse布尔类型参数值必须为 falsePast时间类型(Date)参数值为时间且必须小于 当前时间PastOrPresent时间类型(Date)参数值为时间且必须小于或等于 当前时间Future时间类型(Date)参数值为时间且必须大于 当前时间FutureOrPresent时间类型(Date)参数值为时间且必须大于或等于 当前日期 ③ 在接口校验的对象前面添加上 Validated 注解 PostMapping public ResultLong save(RequestBody Validated SystemUserDto systemUserDto) {Long idsystemUserService.createUser(systemUserDto);return Result.ok(id); }PutMapping public ResultBoolean update(RequestBody Validated SystemUserDto systemUserDto) {systemUserService.updateUser(systemUserDto);return Result.ok(true); }④通过Apifox测试可以看出返回的值并不能看出问题因此下一步结构化一下异常显示 后端报错 Resolved [org.springframework.web.bind.MethodArgumentNotValidException:Validation failed for argument [0] in public com.tps.cloud.response.Resultjava.lang.Longcom.tps.cloud.system.controller.SystemUserController.save(com.tps.cloud.system.dto.SystemUserDto): [Field error in object systemUserDto on field username: rejected value []; codes [NotBlank.systemUserDto.username,NotBlank.username,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [systemUserDto.username,username]; arguments []; default message [username]]; default message [用户账号不能为空]] ]⑤ 给前端返回结构化错误提示需要配置全局异常捕获类GlobalExceptionHandler中添加捕获MethodArgumentNotValidException的方法 /*** validation Exception* param exception* return Result */ ExceptionHandler({ MethodArgumentNotValidException.class }) public Result handleBodyValidException(MethodArgumentNotValidException exception) {FieldError fieldError exception.getBindingResult().getFieldError();return Result.failed(String.format(%s, fieldError.getDefaultMessage())); }通过org.springframework.boot.autoconfigure.AutoConfiguration.imports完成自动配置注册 ⑥ 通过Apifox测试可以看出返回的值已经结构化 集合校验 分组校验 分组验证是为了在不同的验证场景下能够对对象的属性进行灵活地验证从而提高验证的精细度和适用性。一般我们在对同一个对象进行保存或修改时会使用同一个类作为入参。那么在创建时需要校验某个字段但是更新的时候不需要校验这个时候就需要用到分组校验了。 对于定义分组有两点要特别注意 定义分组必须使用接口要校验字段上必须加上分组分组只对指定分组生效不加分组不校验 ① 创建分组 用于创建时指定分组 package com.tps.cloud.group;public interface AddGroup {}用于更新时指定分组 package com.tps.cloud.group;public interface UpdateGroup {}② 在实体类上添加注解我们只添加了AddGroup.class 分组 /** * 用户账号 */ NotBlank(message 用户账号不能为空,groups {AddGroup.class}) private String username; /** * 密码 */ NotBlank(message 密码不能为空,groups {AddGroup.class}) private String password;③ 在新增接口上添加分组更新不添加分组通过Apifox测试 PostMapping public ResultLong save(RequestBody Validated({AddGroup.class}) SystemUserDto systemUserDto) {Long idsystemUserService.createUser(systemUserDto);return Result.ok(id); }PutMapping public ResultBoolean update(RequestBody Validated SystemUserDto systemUserDto) {systemUserService.updateUser(systemUserDto);return Result.ok(true); }④在实体类以及对应接口上添加UpdateGroup.class分组通过Apifox测试 /*** 用户账号*/NotBlank(message 用户账号不能为空,groups {AddGroup.class,UpdateGroup.class})private String username;/*** 密码*/NotBlank(message 密码不能为空,groups {AddGroup.class,UpdateGroup.class})private String password;PutMappingpublic ResultBoolean update(RequestBody Validated({UpdateGroup.class}) SystemUserDto systemUserDto) {systemUserService.updateUser(systemUserDto);return Result.ok(true);}嵌套校验 嵌套校验Nested Validation 指的是在验证对象时对对象内部包含的其他对象进行递归验证的过程。当一个对象中包含另一个对象作为属性并且需要对这个被包含的对象也进行验证时就需要进行嵌套校验。 嵌套属性指的是在一个对象中包含另一个对象作为其属性的情况。换句话说当一个对象的属性本身又是一个对象那么这些被包含的对象就可以称为嵌套属性。 我们继续以保存用户接口为例 ① 创建SystemDeptDto类并添加验证注解现在把SystemDeptDto作为SystemUserDto的嵌套属性 package com.tps.cloud.system.dto;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.tps.cloud.entity.TenantEntity; import com.tps.cloud.group.AddGroup; import jakarta.validation.constraints.NotBlank; import lombok.Data; import lombok.EqualsAndHashCode;/*** 部门传输类*/ Data public class SystemDeptDto{/*** 部门id*/TableIdprivate Long id;/*** 部门名称*/NotBlank(message 部门名称不能为空,groups {AddGroup.class})private String name;/*** 父部门id*/private Long parentId;/*** 显示顺序*/private Integer sort;/*** 负责人id*/private Long leaderUserId;/*** 联系电话*/private String phone;/*** 邮箱*/private String email;/*** 部门状态0正常 1停用*/Validprivate Integer status; } public class SystemUserDto {...省略前面属性/*** 部门*/private SystemDeptDto systemDept; }PostMapping public ResultLong save(RequestBody Validated SystemUserDto systemUserDto) {Long idsystemUserService.createUser(systemUserDto);return Result.ok(id); }② 测试 自定义校验器 有时内置的校验器无法满足您的需求。例如您可能需要验证用户名是否唯一这需要访问数据库。在这种情况下您可以定义自己的校验器。 要定义自定义校验器请创建一个实现 javax.validation.ConstraintValidator 接口的类。在下面的示例中我们将创建一个用于验证用户名是否唯一的校验器 ① 创建校验器UniqueUsernameValidatorConstraintValidator包含以下两种方法 初始化方法 initialize这个方法在验证器的生命周期中仅被调用一次。它传递了与验证器关联的注解实例允许验证器从注解实例中提取和存储配置详情。验证方法isValid 这是实现验证逻辑的地方。这个方法对于每个要验证的值都会被调用并返回一个布尔值表示数据是否符合约束条件。 package com.tps.cloud.system.constraint;import com.tps.cloud.system.service.SystemUserService; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; import lombok.AllArgsConstructor;AllArgsConstructor public class UniqueUsernameValidator implements ConstraintValidatorUniqueUsername, String {private final SystemUserService systemUserService;Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if (value null) {return true;}return systemUserService.findByUsername(value) null;} }② 创建一个自定义注解UniqueUsername以便在代码中使用 package com.tps.cloud.system.constraint;import jakarta.validation.Constraint; import jakarta.validation.Payload;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target({ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) Constraint(validatedBy {UniqueUsernameValidator.class}) public interface UniqueUsername {String message() default 用户名已存在;Class?[] groups() default {};Class? extends Payload[] payload() default {}; }② 在用户账号属性上添加改注解 public class SystemUserDto {.../*** 用户账号*/NotBlank(message 用户账号不能为空,groups {AddGroup.class,UpdateGroup.class})UniqueUsernameprivate String username;... }③ 测试接口
http://www.w-s-a.com/news/317784/

相关文章:

  • 建设购物网站要求优秀网站大全
  • 平顶山做网站公司用源码网站好优化吗
  • 网上电商游戏优化大师手机版
  • 个人微信公众号怎么做微网站吗网站域名需要续费吗
  • 有效的网站建设公丹阳做网站的
  • 哪些行业做网站的多学企业网站开发
  • 外贸seo网站制作网站备案的流程
  • 网站布局教程wordpress 侧边栏位置
  • 谁有手机网站啊介绍一下dedecms 网站重复文章
  • 博客网站快速排名微信机器人免费版wordpress
  • 孝感网站建设xgshwordpress网站基础知识
  • 百度为什么会k网站长沙做网站找哪家好
  • 揭阳商城网站建设新闻稿发布平台
  • 电商网站建设免费在线优化网站
  • 厦门网站建设咨询挣钱最快的小游戏
  • 郑州网站网络营销莱芜雪野湖别墅
  • 安装iis8 添加网站河南省建设执业资格中心网站
  • 个人网站电商怎么做广州市营销型网站建设
  • 空间站做网站什么版本wordpress 勾子
  • win7网站服务器制作软件网站浏览图片怎么做的
  • 网站制作平台公司嵌入式软件开发环境
  • 网站服务器镜像微商做网站网站
  • 十大旅游电子商务网站网上定做衣服
  • 怎样进行网站备案上海发布公众号app
  • 网站后台模板论坛网站优化招商
  • 个人网站设计作品能用VUE做网站
  • 网站建设预付阿里云域名备案查询
  • 苏州本地网站免费咨询医生的软件
  • 个人网站做废品回收福建网站开发招聘
  • wordpress网站备案学设计常用的网站