校驗參數方法:
1.最簡單的方式是,使用Java bean注解校驗(如 @NotEmpty。。。)
2.適合復雜點的自定義校驗(推薦)
2.1 先定義一個校驗接口:
public interface ValidationHandler {
/**
* 校驗pojo的屬性
* @return 通過/不通過
*/
boolean isValid();
}
2.2 pojo實現接口ValidationHandle,編寫校驗邏輯
public class UserVo implements ValidationHandler {
private String username;
private Integer age;
@Override
public boolean isValid() {
return StringUtils.isNotEmpty(username)
&& age > 0
&& age < 100;
}
}
2.3 切面,此處切點使用注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamValidation{
}
2.4 在service中使用
@Service
public class UserService{
@ParamValidation
public void addUser(UserVo user){
//業務操作
}
}
2.5 具體切面代碼
@Component
@Aspect
public class ParamValidator{
@Pointcut("@annotation(com.ex.validator.ParamValidation)")
public void validate(){
}
@Before("validate()")
public void before(JoinPoint point){
for (Object arg : joinPoint.getArgs()) {
if (arg instanceof ValidationHandler) {
if (!((ValidationHandler) arg).isValid()) {
throw new IllegalArgumentException("參數校驗不通過");
}
}
}
}
}
3.簡單實用版(極力推薦)
3.1 在實體中,加上一個校驗方法,此方法加上注解@AssetTure
public class UserVo {
private String username;
private Integer age;
@AssertTrue
public boolean isValid() {
return StringUtils.isNotEmpty(username)
&& age > 0
&& age < 100;
}
}
3.2 在service類上加上@Validated,參數前加上@Valid
@Validated //打開校驗開關
@Service
public class UserService {
// 入參pojo添加@Valid
public void addUser(@Valid UserVo userVo) {
// 業務邏輯操作
}
}