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

佛山网站建设怎么做湖南省郴州市天气

佛山网站建设怎么做,湖南省郴州市天气,seo公司中国,哈尔滨快速建站专业定制1. 前言 在平时的开发工作中#xff0c;我们通常需要对接口进行参数格式验证。当参数个数较少#xff08;个数小于3#xff09;时#xff0c;可以使用if ... else ...手动进行参数验证。当参数个数大于3个时#xff0c;使用if ... else ...进行参数验证就会让代码显得臃肿…1. 前言 在平时的开发工作中我们通常需要对接口进行参数格式验证。当参数个数较少个数小于3时可以使用if ... else ...手动进行参数验证。当参数个数大于3个时使用if ... else ...进行参数验证就会让代码显得臃肿这个时候推荐使用注解来进行参数验证。 在Java中注解Annotation是一种代码标记通常用于提供元数据这些元数据可以被编译器或运行时环境使用。这些注解通常用于框架和库中以实现更加灵活和可配置的代码。 2. 常用注解描述 NotNull 描述标记一个值不能为null。示例 public class User { NotNull private String name; // ... }NotEmpty 描述标记一个集合如List、Set等不能为空。示例 public class User { NotEmpty private ListString interests; // ... }NotBlank 描述标记一个字符串不能为空白即null、空字符串或只包含空格。示例 public class User { NotBlank private String username; // ... }Size 描述标记一个字符串或集合的大小必须在指定的范围内。示例 public class User { Size(min 2, max 50) private String username; // ... }Min 和 Max 描述标记一个数值必须在指定的最小值和最大值之间。示例 public class User { Min(18)Max(60) private int age; // ... }DecimalMin 和 DecimalMax 描述标记一个浮点数或双精度数必须在指定的最小值和最大值之间。示例 public class User { DecimalMin(0.01) DecimalMax(100.00) private double discount; // ... }Digits 描述标记一个整数或浮点数必须在指定的精度和总数值范围内。示例 public class User { Digits(integer 3, fraction 2) // 总长度为53位整数2位小数。例如123.45 是合法的。 private BigDecimal amount; // ... }Pattern 描述标记一个字符串必须匹配指定的正则表达式。通常用于验证输入格式。例如电子邮件地址、电话号码格式等。Pattern注解在javax.validation.constraints包中。Pattern(regexp “^\w{5,}$”)表示长度在5-20之间由字母、数字、下划线组成的字符串。Pattern注解用于类字段上例如用户密码字段。示例 public class User { Pattern(regexp ^[a-zA-Z0-9]*$) private String password; //... } Email 描述标记一个字符串必须是一个有效的电子邮件地址。示例 Email private String emailAddress;AssertTrue 和 AssertFalse 描述标记一个布尔值必须为true或false。示例 AssertTrue private boolean isValid;AssertFalse private boolean isNotValid;Future 描述标记一个日期必须是在未来某个时间点之后。示例 Future private Date expiryDate;Past 描述标记一个日期必须是在过去某个时间点之前。示例 Past private Date purchaseDate;这些注解通常与验证框架如Hibernate Validator一起使用以在运行时验证对象的属性。 3. 注解使用 在项目的pom.xml文件中添加如下依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency在实体类中使用上述注解代码如下 package com.yyqq.demo.entity;import lombok.Data; import javax.validation.constraints.*;Data public class User {NotBlank(message 用户姓名不能为空)private String name;NotBlank(message 密码不能为空)Size(min 6, message 密码长度不能少于6位)private String password;Min(value 0, message 年龄不能小于0岁)Max(value 150, message 年龄不应超过150岁)private Integer age;Pattern(regexp ^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\d{8}$, message 手机号格式不正确)private String phone; }控制器类使用验证代码如下 import com.yyqq.demo.util.Result; import com.yyqq.demo.entity.User; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;RestController RequestMapping(/user) public class UserController {PostMapping(/add)public Result add(Valid RequestBody User user) {return Result.success(user);} }Result是封装结果的一个类用于返回统一的结果代码如下 package com.yyqq.demo.util;import lombok.Data; import java.io.Serializable;Data public class ResultT implements Serializable {private int code;private boolean success;private T data;private String msg;private Result(int code, T data, String msg) {this.code code;this.data data;this.msg msg;this.success code 200;}public static T ResultT sucess(T data) {return new Result(200, data, null);}public static T ResultT fail(String msg) {return new Result(500, null, msg);} }定义全局异常处理类我们在全局异常处理类中使用ExceptionHandler捕获BindException异常获取参数验证异常信息最后返回统一的异常结果格式代码如下 package com.yyqq.demo.util;import com.yyqq.demo.util.Result; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice;RestControllerAdvice public class GlobalExceptionHandler {ExceptionHandler(BindException.class)public Result handleError(BindException e) {BindingResult bindingResult e.getBindingResult();return Result.fail(bindingResult.getFieldError().getDefaultMessage());} }4. 使用分组验证 用于插入记录时的分组验证代码如下 package com.yyqq.demo.interceptor; import javax.validation.groups.Default;public interface Insert extends Default { } 用于更新记录时的分组验证代码如下 package com.yyqq.demo.interceptor; import javax.validation.groups.Default;public interface Update extends Default { }在实体类中进行分组标记代码如下 package com.yyqq.demo.entity;import lombok.Data; import javax.validation.constraints.*;Data public class User {NotBlank(groups {Insert.class, Update.class})NotBlank(message 用户姓名不能为空)private String name;NotBlank(message 密码不能为空)Size(min 6, message 密码长度不能少于6位)private String password;Min(value 0, message 年龄不能小于0岁)Max(value 150, message 年龄不应超过150岁)private Integer age;NotBlank(groups {Insert.class, Update.class})Pattern(regexp ^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\\d{8}$, message 手机号格式不正确)private String phone; }控制器类使用分组验证 package com.yyqq.demo.controller;import com.yyqq.demo.util.Result; import com.yyqq.demo.entity.User; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.validation.Valid;RestController RequestMapping(/user) public class UserController {PostMapping(/add)public Result add(Validated(Insert.class) RequestBody User user) {return Result.success(user);}PostMapping(/update)public Result update(Validated(Update.class) RequestBody User user) {return Result.success(user);} }5. 自定义验证注解 除了框架自带的注解平时的工作中可能需要我们自定义验证注解处理特定的业务需求。 定义注解 package com.yyqq.demo.validate;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target;import static java.lang.annotation.ElementType.*; import static java.lang.annotation.RetentionPolicy.RUNTIME;Documented Retention(RUNTIME) Constraint(validatedBy {PhoneValidator.class}) Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) public interface Phone {String message() default 手机号格式错误;Class?[] groups() default {};Class? extends Payload[] payload() default {}; } 定义验证器类 package com.yyqq.demo.validate;import javax.validation.ConstraintValidatorContext; import javax.validation.ConstraintValidator; import java.util.regex.Pattern;public class PhoneValidator implements ConstraintValidatorPhone, String {private static final String REGEX ^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\\d{8}$;Overridepublic boolean isValid(String s, ConstraintValidatorContext context) {boolean result false;try {result Pattern.matches(REGEX, s);} catch (Exception e) {System.out.println(验证手机号格式时发生异常异常信息 e);}return result;} }实体类使用注解 package com.yyqq.demo.validate;public class User {//其他属性...// Pattern(regexp ^((13[0-9])|(15[^4])|(18[0-9])|(17[0-9])|(147))\\d{8}$, message 手机号格式不正确)Phoneprivate String phone; } 6. Valid与Validated的区别 用于参数校验的注解通常有两个Valid和Validated。它们的区别有如下几点 区别ValidValidated来源Valid是Java标准注解Validated是Spring框架定义的注解。是否支持分组验证不支持支持使用位置构造函数、方法、方法参数、成员属性类、方法、方法参数不能用于成员属性是否支持嵌套校验支持不支持
http://www.pierceye.com/news/86533/

相关文章:

  • 政务网站建设的三大核心功能是什么js特效网站模板
  • 化工类 网站模板辽宁省建设厅科技中心网站
  • 企业建设网站没有服务器我国旅游网站的建设
  • 改进网站建设英文作文个体户公司名称怎么取
  • 做网站的分页查询目前做那个网站能致富
  • 国外 家具 网站模板游戏设计培训机构有哪些
  • 国外做文化的网站国内最近的新闻
  • 黑龙江省住房和建设厅网站首页ui设计师需要考什么证
  • 在网站添加邮箱短网址生成器免费
  • 永嘉营销网站建设wordpress 采集 入库
  • 企业网站建设公司价格网络营销网站的建设与策划
  • 郑州个人网站建设公司排行榜视频号小店
  • 化妆品网站 源码酒店线上营销方案
  • 贵州省城乡和住房建设厅官方网站陕西建设网官方网站
  • 网站导航条背景图片做网站建设还有钱赚吗
  • 宁波模板网站建站wordpress分页怎么写
  • 制作网站的网站h5制作方法和步骤
  • 杭州中小企业网站建设小黄豆crm
  • 网站与域名的区别wordpress安装插件需要ftp
  • 温州网站建设最新报价11号在线 网站开发
  • 北京建设执业注册中心网站小程序商城功能
  • 网站建设部分费用会计科目做街舞网站的素材
  • 网站开发合同范本下载网站做邮箱
  • 广东广州快速网站制作企业招聘网站免费平台
  • 网站建设与推广员岗位职责网站建设 赚钱吗
  • 北京建站免费模板个人备案 做网站
  • 重庆专业的网站建设公司哪家好北京建筑设计网站
  • 深圳建设工程价格信息网站衡水做外贸网站建设
  • 抖音网站表白怎么做网站建设mrd文档模板
  • 小区网站建设方案怎么写最近最火的电商平台是哪个