标签: 表单验证、链式条件查询、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. 验证手机号格式