2011-08-18 25 views
6

Làm thế nào tôi có thể đi về trọng xác nhận vào email cho AuthorizedUser trong tình huống sau đây:JSR 303 Validation Override

public class Account { 
    @Length(min = 1, max = 100, 
      message = "'Email' must be between 1 and 100 characters in length.") 
    @NotNull(message = "'Email' must not be empty.") 
    protected String email; 

    @Length(min = 1, max = 50, 
      message = "'Name' must be between 1 and 50 characters in length.") 
    private String name; 
} 

public class AuthorizedUser extends Account { 
    @Length(min = 1, max = 40, 
      message = "'Field' must be between 1 and 50 characters in length.") 
    private String field; 
} 

Tôi biết tôi có thể 'Hack' giải pháp bằng cách ghi đè địa chỉ email trong setter trên Người dùng được ủy quyền bằng cách thực hiện như sau:

@Override 
public void setEmail(String email) { 
    this.email = email; 
    super.setEmail(" "); 
} 

Nó chỉ cảm thấy bẩn ... Có thể ghi đè mà không viết trình xác thực tùy chỉnh không?

Tôi đã thử di chuyển @Valid đến setter trong lớp siêu và để nó ở trong trường bị ghi đè, nhưng tôi vẫn nhận được thông báo từ lớp siêu về nó đang trống. Có cách nào lười biếng hơn để làm điều này không?

+0

Như vậy đến nay tôi đã kết thúc viết một validator tùy chỉnh, trong ví dụ đơn giản của tôi trường hợp bên dưới công trình nhưng trong mô hình phức tạp hơn, tôi không có ý nghĩa gì khi cần phải tạo thêm nhiều lớp nữa. – Scott

Trả lời

3

Từ những hạn chế được tổng hợp thông qua thừa kế, giải pháp tốt nhất có thể để thay đổi hệ thống phân cấp thừa kế của bạn để một cái gì đó như thế này:

public class BasicAccount { 
    protected String email; 

    @Length(min = 1, max = 50, 
      message = "'Name' must be between 1 and 50 characters in length.") 
    private String name; 
} 

public class EmailValidatedAccount extends BasicAccount { 
    @Length(min = 1, max = 100, 
      message = "'Email' must be between 1 and 100 characters in length.") 
    @NotNull(message = "'Email' must not be empty.") 
    @Override 
    public String getEmail() { 
    return email; 
    } 
} 

public class AuthorizedUser extends BasicAccount { 
    @Length(min = 1, max = 40, 
      message = "'Field' must be between 1 and 50 characters in length.") 
    private String field; 
} 
Các vấn đề liên quan