传入的是一个对象不是map
时间: 2024-02-25 12:52:34 浏览: 52
将对象变成map
非常抱歉,我之前理解有误,这里给您提供一个校验对象的示例代码。
自定义注解类:
```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 fieldName() default "";
}
```
校验器类:
```java
public class ParamValidator implements ConstraintValidator<ParamValidation, Object> {
private String fieldName;
@Override
public void initialize(ParamValidation constraintAnnotation) {
fieldName = constraintAnnotation.fieldName();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value == null) {
return false;
}
try {
Field field = value.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
Object fieldValue = field.get(value);
Field bwField = value.getClass().getDeclaredField("bw");
bwField.setAccessible(true);
Integer bw = bwField.getInt(value);
if (fieldValue == null || StringUtils.isEmpty(fieldValue.toString())) {
return bw == 0;
} else {
return true;
}
} catch (NoSuchFieldException e) {
throw new IllegalArgumentException("不存在该字段");
} catch (IllegalAccessException e) {
throw new IllegalStateException("无法访问该字段");
}
}
}
```
使用示例:
```java
public void someMethod(@ParamValidation(fieldName = "b") MyObject myObject) {
// do something
}
```
在上面的示例中,我们使用 @ParamValidation 注解修饰了方法的参数 myObject,表示对该参数中的 b 字段进行校验。在校验器 ParamValidator 中,我们根据注解中的 fieldName 属性获取需要校验的字段,并进行校验。在使用注解时,我们可以指定 fieldName 属性的值,表示需要对哪个字段进行校验。
希望这个示例对您有所帮助!
阅读全文