能否优化成校验参数传入方式获取而不是固定
时间: 2023-10-02 21:07:38 浏览: 37
当然可以,这里给您提供一个稍微改进的示例代码:
自定义注解类:
```java
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = ParamValidator.class)
public @interface ParamValidation {
String message() default "参数校验失败";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String value() default "";
}
```
校验器类:
```java
public class ParamValidator implements ConstraintValidator<ParamValidation, Object> {
private String paramName;
@Override
public void initialize(ParamValidation constraintAnnotation) {
paramName = constraintAnnotation.value();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
if (value instanceof Map) {
Map<String, Object> map = (Map<String, Object>) value;
Object a = map.get("a");
Object b = map.get(paramName);
Object bw = map.get("bw");
if (a != null || Integer.parseInt(bw.toString()) != 0) {
if (b == null || StringUtils.isEmpty(b.toString())) {
return false;
}
}
}
return true;
}
}
```
使用示例:
```java
public void someMethod(@ParamValidation("b") Map<String, Object> params) {
// do something
}
```
这里我们在自定义注解 ParamValidation 上添加了一个 value 属性,表示需要校验的参数名。在校验器 ParamValidator 中,我们根据 value 属性获取需要校验的参数,并进行校验。在使用注解时,我们可以指定 value 属性的值,表示需要对哪个参数进行校验。
希望这个改进的示例对您有所帮助!