pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
然后是在vo
中加入相应的注解
package com.home.miaosha.entity;
import com.home.miaosha.validate.IsMobile;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
public class LoginVo {
@NotNull
@IsMobile
private String mobile;
@NotEmpty
@Length(min = 6)
private String password;
@Override
public String toString() {
return "LoginVo{" +
"mobile='" + mobile + '\'' +
", password='" + password + '\'' +
'}';
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在controller加入注解
@Valid
package com.home.miaosha.controller;
import com.home.miaosha.entity.CodeMsg;
import com.home.miaosha.entity.LoginVo;
import com.home.miaosha.entity.MiaoUser;
import com.home.miaosha.entity.Result;
import com.home.miaosha.service.MiaoUserService;
import com.home.miaosha.utils.MD5Utils;
import com.home.miaosha.utils.ValiUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
@RestController
public class LoginCon {
@Autowired
MiaoUserService miaoUserService;
@GetMapping("/login")
public Result<Boolean> login(@Valid LoginVo loginVo) {
// if (StringUtils.isEmpty(loginVo.getMobile())) {
// return Result.error(CodeMsg.MOBILE_EMPTY);
// }
// if (!ValiUtils.isMobile(loginVo.getMobile())) {
// return Result.error(CodeMsg.MOBILE_ERROR);
// }
//
// if (StringUtils.isEmpty(loginVo.getPassword())) {
// return Result.error(CodeMsg.PASSWORD_EMPTY);
// }
System.out.println(loginVo);
boolean res = miaoUserService.id(loginVo);
return Result.success(res);
}
}
全局异常处理类,用自己的方式放回错误信息
package com.home.miaosha.exception;
import com.home.miaosha.entity.CodeMsg;
import com.home.miaosha.entity.Result;
import org.springframework.validation.BindException;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.stream.Collectors;
@ControllerAdvice
@ResponseBody
public class GlobalHandler {
@ExceptionHandler(Exception.class)
public Result<String> exceptionHandler(HttpServletRequest request
, Exception e) {
if (e instanceof BindException) {
BindException bindException = (BindException) e;
List<ObjectError> allErrors = bindException.getAllErrors();
List<String> collect = allErrors.stream().map(x -> x.getDefaultMessage()).collect(Collectors.toList());
// ObjectError objectError = allErrors.get(0);
// String msg = objectError.getDefaultMessage();
return Result.error(CodeMsg.BIND_ERROR.fillArgs(collect.toArray()));
}else if(e instanceof GlobalException){
GlobalException globalException = (GlobalException) e;
CodeMsg codeMsg = globalException.getCodeMsg();
return Result.error(codeMsg);
}else {
return Result.error(CodeMsg.ERROR);
}
}
}
自己定义一个运行时异常,其实返回的还是本身的异常。
package com.home.miaosha.exception;
import com.home.miaosha.entity.CodeMsg;
import lombok.Data;
@Data
public class GlobalException extends RuntimeException
{
private CodeMsg codeMsg;
public GlobalException(CodeMsg codeMsg) {
this.codeMsg = codeMsg;
}
}
自己定义的注解
package com.home.miaosha.validate;
import org.hibernate.validator.constraints.Length;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@Target({ElementType.FIELD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(
validatedBy = {MobileVali.class}
)
public @interface IsMobile {
boolean required() default true;
int max() default 2147483647;
String message() default "手机号码格式有误";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
相对应的处理类
package com.home.miaosha.validate;
import com.home.miaosha.utils.ValiUtils;
import org.springframework.util.StringUtils;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class MobileVali implements ConstraintValidator<IsMobile, String> {
boolean required ;
@Override
public void initialize(IsMobile constraintAnnotation) {
required = constraintAnnotation.required();
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (required) {
return ValiUtils.isMobile(s);
}else{
if (StringUtils.isEmpty(s)) {
return true;
}else{
return ValiUtils.isMobile(s);
}
}
}
}
service
package com.home.miaosha.service;
import com.home.miaosha.dao.MiaoUserDao;
import com.home.miaosha.entity.CodeMsg;
import com.home.miaosha.entity.LoginVo;
import com.home.miaosha.entity.MiaoUser;
import com.home.miaosha.entity.Result;
import com.home.miaosha.exception.GlobalException;
import com.home.miaosha.utils.MD5Utils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MiaoUserService {
@Autowired
MiaoUserDao miaoUserDao;
public boolean id(LoginVo loginVo) {
long id = Long.parseLong(loginVo.getMobile());
MiaoUser user = miaoUserDao.id(id);
if (user == null) {
throw new GlobalException(CodeMsg.MOBILE_NOT_EXIST);
}
String password = user.getPassword();
String salt = user.getSalt();
String second = MD5Utils.second(loginVo.getPassword() + "", salt);
if (!password.equals(second)) {
throw new GlobalException( CodeMsg.PASSWORD_NOT_EXIST);
}
return true;
}
}
基本的使用应该是4步
1,引入pom
2,vo上注解
3,入参上一个开启注解
4,一个统一定制的异常返回。 有两个注解。
其余的再慢慢完善。