最佳实践验证对象

时间:2018-10-08 07:29:33

标签: java validation

我想验证对象是否验证了一些规则,但是我不确定什么是最好的方法。我有一个Validator类来验证一些对象。

要验证的类如下:

public class Request implements Serializable {

    private static final long serialVersionUID = 1L;

    private String requestDetail;

    private String customerId;

    private String firstName;

    private String middleName;

    private String lastName;

    private IdentityDocument identityDocument;

    private ContractBureau contract;

    public String getRequestDetail() {
        return requestDetail;
    }

    public void setRequestDetail(String requestDetail) {

        this.requestDetail = requestDetail;
    }

    public String getCustomerId() {
        return customerId;
    }

    public void setCustomerId(String customerId) {
        this.customerId = customerId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getMiddleName() {
        return middleName;
    }

    public void setMiddleName(String middleName) {
        this.middleName = middleName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public IdentityDocument getIdentityDocument() {
        return identityDocument;
    }

    public void setIdentityDocument(IdentityDocument identityDocument) {
        this.identityDocument = identityDocument;
    }

    public ContractBureau getContract() {
        return contract;
    }

    public void setContract(ContractBureau contract) {
        this.contract = contract;
    }
}

我要检查对象是否为null或为空,请检查如果customerID不为null,则所有其他属性必须为null,请检查合同是否为null或为空,所有其他属性必须为null。目前我有很多,但是我不知道这是否是最好的方法。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您大致有两种方法:

  • 直接在类的字段上指定验证约束。
    The bean validation API可能会对您有所帮助。
    @NotEmpty@NotBlank,...是您应该感兴趣的约束。
    您可能会找到此API here的示例。

  • 像定义类一样执行一个对象的整体验证,该对象通常作为该验证类的方法的参数传递。
    Bean验证API可能仍然使您感兴趣。

每种方法都有其优点和局限性。
您应该意识到它们,并使用与您的需求更好地匹配的方式。
这里是速食的小结。我可能想念一些东西,但我认为它可以为您提供一些见解/想法。

在字段上指定约束

优点:

    这些类保持
  • 约束以进行自我验证:代码更有意义。
  • 如果约束不是特定于用例的,则可重用。

限制:

  • 如果您有多种方法来验证约束,那么这还不够。
  • 验证可以分为多个类别:较难阅读/维护的代码。

示例:通过在实体类本身上指定约束来验证JPA实体是有意义的:您有一种方法来验证每个bean(根据数据模型),并且您想重用这些验证。

定义验证器类

优点:

  • 可扩展模型:允许多种方式来验证对象约束:只需创建一个新的验证器
  • 读取/维护验证码的单个位置。
  • 不需要更改类以进行自我验证(有时您可能会或不想)

限制:

    即使约束不是特定于用例,
  • 约束也无法重用。 您必须为每种情况创建一个新的验证器类。

示例:使用验证器类根据用户的个人资料来验证用户请求很有意义:您可能根据用户配置文件有不同的规则,并且还希望将其分隔在特定的验证器类中,以简化维护/可读性。

相关问题