注解配置
import javax. validation. Constraint ;
import javax. validation. Payload ;
import java. lang. annotation. ElementType ;
import java. lang. annotation. Retention ;
import java. lang. annotation. RetentionPolicy ;
import java. lang. annotation. Target ;
@Constraint ( validatedBy = { UnionsFieldValidator . class } )
@Target ( { ElementType . TYPE } )
@Retention ( RetentionPolicy . RUNTIME )
public @interface UnionsFieldValidation {
String message ( ) default "联合字段校验失败" ;
Class < ? > [ ] groups ( ) default { } ;
Class < ? extends Payload > [ ] payload ( ) default { } ;
int type ( ) default 0 ;
}
校验配置
import javax. validation. ConstraintValidator ;
import javax. validation. ConstraintValidatorContext ;
public class UnionsFieldValidator implements ConstraintValidator < UnionsFieldValidation , Object > {
private int type;
@Override
public void initialize ( UnionsFieldValidation customValid) {
type = customValid. type ( ) ;
}
@Override
public boolean isValid ( Object value, ConstraintValidatorContext constraintValidatorContext) {
if ( value == null ) {
return true ;
}
if ( value instanceof MyTest2RO ) {
return vldMyTest2RO ( ( MyTest2RO ) value) ;
}
return false ;
}
private boolean vldMyTest2RO ( MyTest2RO v) {
System . out. println ( 0 == type) ;
Long intC = v. getIntC ( ) ;
boolean isValid = null == intC? true : 1 == intC&& "A" . equals ( v. getStrA ( ) ) ;
return isValid;
}
}
运用注解,放在对象上面
@JsonInclude ( JsonInclude. Include . NON_EMPTY )
@ApiModel ( value = "测试2RO" , description = "测试2RO" )
@Data
@UnionsFieldValidation ( message = "当intC为1时候,strA只能为A" )
public class MyTest2RO {
异常捕获
@ExceptionHandler ( MethodArgumentNotValidException . class )
public Object handleMethodArgumentNotValidException ( MethodArgumentNotValidException e)
{
log. error ( e. getMessage ( ) , e) ;
FieldError fieldError = e. getBindingResult ( ) . getFieldError ( ) ;
String message = null != fieldError?
fieldError. getDefaultMessage ( ) :
e. getBindingResult ( ) . getAllErrors ( ) . get ( 0 ) . getDefaultMessage ( )
;
return AjaxResult . error ( message) ;
}