簡體   English   中英

自定義驗證在 spring 啟動時不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM