每个类都写大量的健壮性判断过于麻烦,我们可以使用validation 简化我们的代码
在pom.xml中添加validation依赖
<!-- validation组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
自定义手机号码验证规则
package com.deng.seckill.vo;
import com.deng.seckill.utils.ValidatorUtil;
import com.deng.seckill.validator.isMobile;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
/**
* 手机号码验证规则
*
* @author dengzhan
* @since 1.0.0
*/
public class isMobileValidator implements ConstraintValidator<isMobile,String> {
//是否必填
private boolean required = false;
@Override
public void initialize(isMobile constraintAnnotation) {
required = constraintAnnotation.required();
}
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (required){
//如果必填,进行手机号校验
return ValidatorUtil.isMobile(value);
}else {
if (StringUtils.isEmpty(value)){
return true;
}else {
return ValidatorUtil.isMobile(value);
}
}
}
}
自定义注解
package com.deng.seckill.validator;
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.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* 验证手机号,自定义注解
*
* @author dengzhan
* @since 1.0.0
*/
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE})
@Retention(RUNTIME)
@Documented
//@Constraint里面定义校验规则
@Constraint(validatedBy = {com.deng.seckill.vo.isMobileValidator.class})
public @interface isMobile {
//手机号为必填
boolean required() default true;
//校验失败提示
String message() default "手机号码格式错误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
修改LoginVo,添加注解
package com.deng.seckill.vo;
import com.deng.seckill.validator.isMobile;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.validation.constraints.NotNull;
/**
* @Author: dengzhan
* @Date: 2021/1/14
* @Time: 19:26
* @description: 登录参数
*/
@Data
public class LoginVo {
@JsonProperty(value = "mobile")
@NotNull
@isMobile
private String mobile;
@JsonProperty(value = "password")
@NotNull
@Length(min = 32)
private String password;
}
LoginController中添加@Valid
@Data
public class LoginVo {
@JsonProperty(value = "mobile")
@NotNull
@isMobile
private String mobile;
@JsonProperty(value = "password")
@NotNull
@Length(min = 32)
private String password;
}
UserServiceImpl,注释掉之前的健壮性判断即可
// if (StringUtils.isEmpty(mobile)||StringUtils.isEmpty(password)){
// return RespBean.error(RespBeanEnum.LOGINVO_ERROR);
// }
// if (!ValidatorUtil.isMobile(mobile)){
// return RespBean.error(RespBeanEnum.MOBILE_ERROR);
// }