springboot自定义验证-传值范围
阅读原文时间:2023年07月08日阅读:1

package com.xf.common;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_USE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
* 边界值校验
* @author Lilu
* @date 2021-7-16 16:57
*/

import javax.validation.Constraint;
import javax.validation.Payload;

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = { ValueInImpl.class })
public @interface ValueIn {

String\[\] in();

String message() default "参数不在允许范围";

Class<?>\[\] groups() default {};

Class<? extends Payload>\[\] payload() default {};

}

package com.xf.common;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import org.springframework.stereotype.Component;

@Component
public class ValueInImpl implements ConstraintValidator {

String\[\] in;

@Override  
public boolean isValid(String value, ConstraintValidatorContext context) {  
    for (int i = 0; i < in.length; i++) {  
        if (in\[i\].equals(value))  
            return true;  
    }  
    return false;  
}

@Override  
public void initialize(ValueIn constraintAnnotation) {  
    this.in = constraintAnnotation.in();  
    ConstraintValidator.super.initialize(constraintAnnotation);  
}

}

@PostMapping("test")
@ApiOperation(value = "0.test", notes = "")
@ApiOperationSupport(order = 0)
public Object test(@ApiParam("a") @ValueIn(in = { "1",
"2" }, message = "hjdfashjfkhsakjf") @RequestParam(value = "a") String a) throws Exception {
// DataSourceHolder.setDataSource("2");
return R.ok();
}

@ExceptionHandler(value = ConstraintViolationException.class)  
@ResponseBody  
public Object jsonErrorHandler(HttpServletRequest req, ConstraintViolationException e) throws Exception {  
    return R.error(e.getMessage());  
}