pom自定义注解测试
还有一种自定义注解是通过AOP和注解实现的,本文暂不介绍。
一、pom
javax.validation
validation-api
2.0.1.Final
org.hibernate
hibernate-validator
5.2.0.Final
二、自定义注解
2.1、注解
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;
@documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Constraint(validatedBy = BankNoValidator.class)
public @interface BankNo {
String message() default "银行账号错误";
Class>[] groups() default {};
Class extends Payload>[] payload() default {};
}
2.2、配置校验类
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class BankNoValidator implements ConstraintValidator{ @Override public void initialize(BankNo constraintAnnotation) { ConstraintValidator.super.initialize(constraintAnnotation); } @Override public boolean isValid(String bankNo, ConstraintValidatorContext constraintValidatorContext) { return null !=bankNo && !"".equals(bankNo); } }
三、测试
3.1、全局异常处理器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
private Logger logger = LoggerFactory.getLogger(getClass());
@ExceptionHandler(MethodArgumentNotValidException.class)
public CommonResponseDTO handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
logger.error("{}", e.getBindingResult().getFieldError().getDefaultMessage());
return CommonResponseDTO.builder().code("1002")
.message(e.getBindingResult().getFieldError().getDefaultMessage()).build();
}
}
3.2、请求类
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("fund_user")
@ApiModel(value="User对象", description="用户表")
public class FundUser implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "银行账号")
@BankNo
private String bankNo;
}
@Data @Builder public class CommonResponseDTO{ private String code; private String message; private T data; }
3.3、测试类
@RestController
public class TestApi {
@PostMapping("/testPost")
public void testPost(@Valid @RequestBody FundUser user){
System.out.println(user.toString());
}
}
3.4、postman测试
测试成功!



