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<ValueIn, String> { 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()); }