[英]Custom Validation Not Working on spring boot
我正在嘗試在 spring 啟動時實現自定義驗證,但代碼存在一些問題,即使我傳遞了錯誤的電話號碼,電話號碼應該是 10 位數字,但我傳遞的是一個字符串,但我仍然獲得狀態為 OK 誰能告訴我我的代碼有什么問題
@Data
public class StudentData {
@Phone
String phone;
}
@RestController
public class HomeController {
@PostMapping("/showData")
public String display(@Valid @RequestBody StudentData studentData){
return "OK";
}
}
@Documented
@Constraint(validatedBy = PhoneValidation.class)
@Target( { ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface Phone {
String message() default "{Wrong phone}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class PhoneValidation implements ConstraintValidator<Phone, String> {
@Override
public void initialize(Phone phone) { }
@Override
public boolean isValid(String phoneField, ConstraintValidatorContext constraintValidatorContext) {
if(phoneField == null) {
return false;
}
if(phoneField.matches("^[0-9]*$"))
return true;
return false;
}
}
我傳遞的有效載荷 http://localhost:8080/showData { “電話”:“abc” }
嘗試將 @Validated 添加到您的 controller。
如果這不起作用,我還會確認驗證碼被命中。 在調試模式下運行 API 並在 isValid 方法中設置一個斷點可以確認這是否是驗證邏輯、Bean 驗證器注入或您的測試設置(是否是測試場景?)中的問題。
首先,您不需要在@RestController 上使用@Validated,servlet 容器將在用@Valid 注釋的數據輸入上為您驗證它其次,您的正則表達式驗證所有由數字組成的字符串,不管它們的長度如何,所以“1”或“22222222222222222”是一個有效的Phone
最后但並非最不重要的是 - 您的代碼按預期工作:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.