我正在尝试实现自定义注释来验证我的字段。我们的想法是,只要注释字段为 try{
for(let i = 0; i < 6; i++) {
const find = async () => {
const found = await JobStatus.findOne({_id: mongoose.Types.ObjectId(data._id)}).exec();
console.log("Before "+i+" : " +found.number_of_items_processed)
found.number_of_items_processed += 1
found.save();
console.log("After "+i+" : " +found.number_of_items_processed)
}
find()
}//for(....)
} catch (err) {
console.log(err)
,验证就会失败。这样的事情。
null
现在如果这返回一个@RequiredProperty
public abstract Person getPerson();
Person,我希望验证失败(理想情况下是自定义消息“Person field is null”)。
我试着这样做。
null
验证员。
@Documented
@Constraint(validatedBy = RequiredPropertyValidator.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD, METHOD, PARAMETER, ANNOTATION_TYPE, TYPE_USE})
@ReportAsSingleViolation
public @interface RequiredProperty {
String message() default "{javax.validation.constraints.RequiredProperty.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
然而,这不起作用。它根本不验证。对象public class RequiredPropertyValidator implements ConstraintValidator<RequiredProperty, Object> {
@Override
public void initialize(RequiredProperty constraintAnnotation) {
}
@Override
public boolean isValid(Object property, ConstraintValidatorContext context) {
return property != null;
}
}
甚至从未传递给property
方法。关于如何使其发挥作用的任何建议?
更新
删除空的isValid
方法使其正常工作。但是,我不知道如何创建“人员”字段为空的自定义错误消息。这可能吗?
我在initialize
文件中创建了一条自定义消息,但这只是一条静态消息,我想从运行时捕获实际字段。