开发中遇到的问题&解决方案(一)

简介: 在开发过程在我们往往会遇到很多的开发阻碍或者因为原生框架的不支持导致的一系列问题或者有的不是问题,是我们使用普通的大量的复制粘贴改改就能用的代码去实现功能,这样使得代码很冗余,我们能不能去尝试找一些好的方案比如采用设计模式这些去优化我们的代码,实现代码简洁明了,易扩展呢?答案是肯定的。这个系列文章会使用案列加解决方案的形式为大家讲解,那下面我们开始吧。


前言

在开发过程在我们往往会遇到很多的开发阻碍或者因为原生框架的不支持导致的一系列问题或者有的不是问题,是我们使用普通的大量的复制粘贴改改就能用的代码去实现功能,这样使得代码很冗余,我们能不能去尝试找一些好的方案比如采用设计模式这些去优化我们的代码,实现代码简洁明了,易扩展呢?答案是肯定的。这个系列文章会使用案列加解决方案的形式为大家讲解,那下面我们开始吧。

  • 主题:解决Spring Boot里的表单字段重复性校验的问题
  • 问题阐释:重复性校验体现在哪里?大量的重复代码
  • 案例:不论是在Spring还是Spring Boot的使用中我们后端开发人员都会遇到表单校验的问题,有人说前端做了校验后端就不用做了,别!不是不相信队友,后端也做校验的话会少很多问题,相信很多后端小伙伴都深有体会。回到正题上,字段校验的话,字段少的话,就是Controller里一堆if判断,功能当然实现了但是呢代码看着很乱,各种判断,后期也不好维护。当然后面也免不了被接手项目的人喷代码像翔一样。所以呢,写代码用点心,可以不被喷。
  • 说到校验很多小伙伴找到的都是使用Validation来校验参数,没错,使用Validation自带一些注解的确能解决很多常规的问题,比如下图这些:

微信截图_20220531133500.png

另外经验丰富的小伙伴很多都喜欢用正则表达式,所以@Pattern注解就很受欢迎了,比如身份证校验的,15位或者18位,用代码去取数组判断就很麻烦,用正则表达式呢,@Pattern(regexp="(^\d{15})|(^\d{18})(\d18)|(^\d{17}(\d|X|x)$)",message="身份证格式不正确!"),这样就可以了,是不是很方便,那正则表达式也不能实现的呢,那就使用自定义注解吧,下面以身份证校验为例子。

1.实现注解方法,注意下面的几个注解元
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
//加载校验的类
@Constraint(validatedBy = IdCardNoValidator.class)
public @interface IdCardNoConstraint {
    String message() ;
    Class<?>[] groups() default { };
    Class<? extends Payload>[] payload() default { };
}
复制代码
2.校验规则,具体的校验,返回true/false,false则触发错误提示即message
public class IdCardNoValidator implements ConstraintValidator<IdCardNoConstraint, Object> {
   @Override
   public void initialize(IdCardNoConstraint constraintAnnotation) {
   }
   @Override
   public boolean isValid(Object value, ConstraintValidatorContext context) {
     String regex="/^[1-8][1-7]\\d{4}(?:19|20)\\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\\d|3[01])\\d{3}[\\dX]$/\n" +
               "\n";
    return    Pattern.matches(value.toString(),regex);
   }
复制代码
3.自定义注解的使用
@IdCardNoConstraint(message="身份证格式不正确,请输入正确的身份证!")
private String idCardNo;
复制代码

以上三步就完成了一个自定义注解的编写,如果项目中出现大量的同类似校验,写这个一个比写一堆if-else好多了。

小结

今天的问题及解决方案就讲到这里,我们明天继续。fighting......

目录
相关文章
|
7月前
|
算法 Java 调度
死锁预防与解决方案
死锁预防与解决方案
|
Java Spring
解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 9680 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
|
数据安全/隐私保护
开发中遇到的问题&解决方案(五)
在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。
382 0
开发中遇到的问题&解决方案(五)
|
JSON 自然语言处理 Java
开发中遇到的问题&解决方案(十)
我们在开发中一般遇到会对于敏感词的过滤或者屏蔽,因为之前做过社区类的APP,在这方面也踩了不少的坑,算是也积累了一点点的经验,那么今天我们来看看hutool里对于敏感词的一些操作,工具类SensitiveUtil()
405 0
开发中遇到的问题&解决方案(十)
|
Java
开发中遇到的问题&解决方案(八)
以前的一个老项目里使用过ZXing进行会员和门店二维码的生成操作,当时出现过Java版本升级后不兼容的问题,很是麻烦,于是替换成了hutool里的二维码生成,下面我们来看看具体的实现。
206 0
开发中遇到的问题&解决方案(八)
|
Java 数据库 微服务
开发中遇到的问题&解决方案(三)
我们在日常的开发中会使用到很多工具类,比如最常用的Http请求的,或者日期工具类,处理时间差或者对日期进行特殊处理的,还有就是图片上传类的,比如阿里云或者腾讯云得SSO图片上传,以及Excel文件的导入导出。那这些工具类基本上都是跟着项目的,就是每个项目都写各自的工具类,如果分工明确细化到小组那重复代码就多了,那把工具类集成成一个项目类呢,由一个人去维护这个工具类工程,如果是微服务项目就是一个工具类的微服务,这样做的好处就很明显了,至少公司的研发部在使用到常用的工具类时不必再去网上找到。
329 0
开发中遇到的问题&解决方案(三)
|
网络协议 数据安全/隐私保护
开发中遇到的问题&解决方案(七)
邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看hutool里对于邮件发送的包装是怎么样的。
209 0
开发中遇到的问题&解决方案(七)
|
Java Linux 数据安全/隐私保护
开发中遇到的问题&解决方案(六)
之前的项目里有用到FTP,需要使用FTP把图片及一些必要文件上传到第三方的FTP服务器上,所以会涉及FTP连接,创建用户,创建文件夹,文件上传等,项目里选用的还是hutool包装的FTP工具类,下面来看看这些功能的在hutool里是怎么包装的。
547 0
开发中遇到的问题&解决方案(六)
开发中遇到的问题&解决方案(四)
今天继续hutool工具类的认识,废话不多说下面直接进入主题。
320 0
开发中遇到的问题&解决方案(四)
|
安全 机器人 数据安全/隐私保护
开发中遇到的问题&解决方案(九)
在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。
273 0
开发中遇到的问题&解决方案(九)