首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSR 303验证覆盖

JSR 303验证覆盖
EN

Stack Overflow用户
提问于 2011-08-19 02:56:28
回答 1查看 4.2K关注 0票数 6

在以下情况下,如何覆盖电子邮件中对AuthorizedUser的验证:

代码语言:javascript
复制
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;
}

我知道我可以通过在AuthorizedUser上重写setter中的电子邮件地址来“破解”这个解决方案,方法如下:

代码语言:javascript
复制
@Override
public void setEmail(String email) {
   this.email = email;
   super.setEmail(" ");
}

感觉很脏..。这是否可以在不编写自定义验证器的情况下被覆盖?

我尝试将@Valid移到超类中的setter中,并将其留在被覆盖的字段中,但我仍然收到来自超类的关于它为空的消息。有没有更懒惰的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-19 03:12:36

由于约束是通过继承聚合的,因此最好的解决方案可能是将继承层次结构更改为如下所示:

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7112626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档