2011-08-18 15 views
6

Come posso fare per sovrascrivendo la convalida sulla e-mail per l'AuthorizedUser nella seguente situazione:JSR 303 Convalida 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; 
} 

So che potrei 'hackerare' la soluzione sovrascrivendo l'indirizzo di posta elettronica nel setter sul AuthorizedUser effettuando le seguenti operazioni:

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

Si sente solo sporco ... questo è possibile per essere sovrascritti senza scrivere un validatore personalizzato?

Ho provato a spostare @Valid sul setter nella super classe e a lasciarlo fuori nel campo sottoposto a override, ma continuo a ricevere il messaggio dalla super classe che è vuoto. C'è un modo più pigro per farlo?

+0

Finora ho finito per scrivere un validatore personalizzato, nel mio esempio semplificato i casi di opere qui sotto ma nel modello più complesso che ho non aveva senso aver bisogno di fare molte altre classi. – Scott

risposta

3

Dal vincoli sono aggregati per via ereditaria, la soluzione migliore potrebbe essere quella di modificare la gerarchia di ereditarietà a qualcosa di simile:

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; 
} 
Problemi correlati