2015-08-31 75 views
2

我想在澤西島實施驗證,以便如果我發送的數據庫中已存在的用戶名或電子郵件的重複值,則應該拋出一個錯誤,說明用戶名/電子郵件已存在。如何在澤西島使用自定義驗證

我該如何實現這個目標?

我通過這件球衣文檔

https://jersey.java.net/documentation/latest/bean-validation.html

https://github.com/jersey/jersey/tree/2.6/examples/bean-validation-webapp/src

走了,但我不明白究竟是什麼我必須遵循,使我的自定義澤西驗證。

假設我在正文中發送一個JSON,同時創建一個用戶,如:提前

{ 
    "name":"Krdd", 
    "userName":"khnfknf", 
    "password":"sfastet", 
    "email":"[email protected]", 
    "createdBy":"xyz", 
    "modifiedBy":"xyz", 
    "createdAt":"", 
    "modifiedAt":"", 

    } 

感謝您的援助之手。

回答

7

假設你有一流的請求實例:

public class UserRequest { 

    // --> NOTICE THE ANNOTATION HERE <-- 
    @UniqueEmail(message = "email already registered") 
    private final String email; 

    public UserRequest(String email) { 
     this.email = email; 
    } 

    public String getEmail() { 
     return email; 
    } 
} 

您必須添加一個新的註釋(並鏈接到使用@Constraint您的驗證器類):也

@Target({ ElementType.FIELD, ElementType.ANNOTATION_TYPE }) 
@Retention(RetentionPolicy.RUNTIME) 
@Constraint(validatedBy = { UniqueEmailValidator.class }) 
@Documented 
public @interface UniqueEmail { 
    String message(); 

    Class<?>[] groups() default { }; 

    Class<? extends Payload>[] payload() default { }; 

} 

那麼你必須實施驗證本身:

public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, UserRequest> { 
    @Override 
    public void initialize(UniqueEmail constraintAnnotation) { 

    } 

    @Override 
    public boolean isValid(UserRequest value, ConstraintValidatorContext context) { 
     // call to the DB and verify that value.getEmail() is unique 
     return false; 
    } 
} 

你就完成了。請記住,Jersey在內部使用HK2,因此如果您使用Spring或其他DI,將某種DAO綁定到您的Validator實例可能會非常棘手。

+0

我做完了..謝謝了很多 – CandleCoder