java 链式表单验证

标签: 表单验证、链式条件查询、java后台验证表单

在日常开发中,我们经常会对用户提交的表单进行验证

上方图片是一个常见的后台表单验证这还只是其中的一小部分

这种验证方法重复性代码较多, 比如参数不能为空判断,如果我有20个字段需要非空判断,我就要写20个条件判断

这种代码重复性高且没有质量

 

下面给大家推荐链式条件查询

 

Chaining demoChaining = new Chaining();
    demoChaining
        .paramName("接收者邮箱") 这里设置下方字段的名称
        .paramIsEmpty(mail) 验证邮箱不能为空
        .mailValidator(mail) 验证邮箱格式
        .paramName("手机号") 这里设置下方字段的名称(每添加一个条件都要讲这个字段的名称加上)
        .paramIsEmpty(phone) 验证手机号不能为空
        .phoneValidator(phone) 验证手机格式
        .paramName("消息") 
        .paramIsEmpty(message); 验证消息不能为空

这里我们只需要在验证参数前设置参数的名称,然后在进行参数的验证就可以了,通过链的方式去验证字段

附后端代码

import com.changebj.common.core.exception.BizException;
import lombok.Data;

import java.util.regex.Pattern;

/**
 * @author qi
 * @date 2020/12/30
 */
@Data
public class Chaining {

    /**
     * 邮箱
     */
    private String mail;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 参数名称
     */
    private String paramName;

    /**
     * 参数
     */
    private String param;

    public Chaining() {

    }

    /**
     * 设置参数名称, 用来拼接提示
     */
    public Chaining paramName(String parName) {
        this.paramName = parName;
        return this;
    }


    public Chaining setMail(String phoneNumber) {
        this.mail = mail;
        return this;
    }

    /**
     * 判断参数不能为空
     */
    public Chaining paramIsEmpty(String mail) {
        if ("".equals(mail)) {
            throw new BizException("3", paramName + "不能为空");
        }

        if (mail==null) {
            throw new BizException("3", paramName + "不能为NULL");
        }

        if ("null".equalsIgnoreCase(mail)){
            throw new BizException("3", paramName + "不能为NULL");
        }
        this.mail = mail;
        return this;
    }

    /**
     * 邮箱格式验证
     */
    public Chaining mailValidator(String mail) {
        if (!Pattern.matches("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", mail)) {
            throw new BizException("3", paramName + "格式错误");
        }
        this.mail = mail;
        return this;
    }

    /**
     * 手机格式验证
     */
    public Chaining phoneValidator(String phone) {
        if (!Pattern.matches("^((13[0-9])|(15[^4,\\D])|(16[6])|(17[0-9])|(18[0-9])||(19[8-9]))\\d{8}$", phone)) {
            throw new BizException("3", paramName + "格式错误");
        }
        this.phone = phone;
        return this;
    }


    /**
     * 字符最大限制
     */
    public Chaining stringMax(String param, Integer max) throws ReturnException {
        if (param.length()>max) {
            throw new ReturnException("3", paramName +"超过字段最大限制(" + max+ ")");
        }
        return this;
    }
 
    /**
     * 字符最小限制
     */
    public Chaining stringMin(String param, Integer min) throws ReturnException {
        if (param.length()<min) {
            throw new ReturnException("3", "低于字段最小限制(" +min+ ")");
        }
        return this;
    }

}

请注意方法的返回值,这里我们传的是对象本身,所以我们就可以以链的方式去验证字段,如果不符合条件直接抛出异常

推荐异常类 传送门 https://blog.csdn.net/qq_39997045/article/details/112068918

附测试方法

@ApiOperation(value = "链式条件测试",notes = "链式条件测试")
@PostMapping(value = "/chainingDemo")
public Map<String, Object> chainingDemo(
        @ApiParam(value = "邮箱",required = true) @RequestParam(value = "mail", required = true) String mail,
        @ApiParam(value = "消息",required = true) @RequestParam(value = "message", required = true) String message,
        @ApiParam(value = "手机号",required = false) @RequestParam(value = "phone",required = false) String phone,
        HttpServletRequest request, HttpServletResponse response){

    Map<String, Object> map = new HashMap<>();

    File file = null;

    Chaining demoChaining = new Chaining();
    demoChaining
        .paramName("接收者邮箱")
        .paramIsEmpty(mail)
        .mailValidator(mail)
        .paramName("手机号")
        .paramIsEmpty(phone)
        .phoneValidator(phone)
        .paramName("消息")
        .paramIsEmpty(message);


    map.put("code", "1");
    map.put("msg", "成功");
    return map;
}

这样看是不是简单很多了

附测试结果

1. 邮箱不为空验证

2. 邮箱格式验证

3. 验证手机号不为空

4. 验证手机号格式

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值