2015-08-31 38 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