1.自定义参数校验注解
直接看代码,没有过多解释
1.接口
package com.battcn.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import com.battcn.interceptor.IsMobileInterceptor;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy = IsMobileInterceptor.class)
public @interface IsMobile {
String value() default "^[1](([3|5|8][\\d])|([4][5,6,7,8,9])|([6][5,6])|([7][3,4,5,6,7,8])|([9][8,9]))[\\d]{8}$";
String message() default "手机号格式不正确";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
2.实现
package com.battcn.interceptor;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import com.battcn.annotation.IsMobile;
public class IsMobileInterceptor implements ConstraintValidator<IsMobile,Object> {
// 保存flag值
private String value;
private String message;
@Override
public void initialize(IsMobile flagValidator) {
// 注解内配的值赋值给变量
this.value = flagValidator.value();
this.message = flagValidator.message();
}
@Override
public boolean isValid(Object value1, ConstraintValidatorContext constraintValidatorContext) {
System.out.println(">>>>>>>>>>"+value);
System.out.println(">>>>>>>>>>"+value1);
System.out.println(constraintValidatorContext.toString());
// 阻止默认提示语值(message)
// constraintValidatorContext.disableDefaultConstraintViolation();
// 改变默认提示语值,重新设置
// constraintValidatorContext.buildConstraintViolationWithTemplate(message + "不可为空").addConstraintViolation();
if(value1 == null)return true;
Boolean isFlag = false;
if (value1.toString().matches(value)){
isFlag = true;
}
return isFlag;
}
}
3.测试 userentity
package com.battcn.entity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import com.battcn.annotation.IsMobile;
import lombok.Data;
@Data
public class UserEntity {
private String userName;
private String id;
private String sex;
private String age;
@IsMobile(message="手机号")
private String mobilePhone;
private String salary;
}
4.控制层
package com.battcn.controller;
import com.battcn.annotation.CacheLock;
import com.battcn.entity.UserEntity;
import javax.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
* BookController
*
*
*/
@RestController
@RequestMapping("/books")
public class BookController {
@CacheLock(prefix = "books")
@GetMapping
public String query() {
return "提交成功";
}
@RequestMapping(value = "search", method = RequestMethod.GET)
public String search(@Valid UserEntity entity) throws Exception {
try {
return "sucess";
} catch (Exception e) {
throw new Exception(e);
}
}
}