【问题标题】:How to implement JSR-303 for Enums如何为枚举实现 JSR-303
【发布时间】:2017-09-06 23:15:50
【问题描述】:

我正在构建一个 Rest WS 并验证我正在使用 JSR-303 BeanValidation 的请求元素,但是有一个字段类型 Enum。

EmploymentType.java

public enum EmploymentType {
    EMPTY, FULL, PARTTIME, CONTRACT, CASUAL;

    public static EmploymentType getDefaultEnum() {
        return EMPTY;
    }
}

以及我用来实现这个的类:

就业.java

public class Employment implements Serializable{

    private static final long serialVersionUID = 1L;

    @NotNull(message="employmentType does not accept null values")
    private EmploymentType employmentType;

    @Valid
    @NotNull(message="orgData does not accept null values")
    private OrgData orgData;

    public Employment() {
        employmentType = EmploymentType.getDefaultEnum();
        orgData = new OrgData();
    }

    public EmploymentType getEmploymentType() {
        return employmentType;
    }

    public void setEmploymentType(EmploymentType employmentType) {
        this.employmentType = employmentType;
    }

    public OrgData getOrgData() {
        return orgData;
    }

    public void setOrgData(OrgData orgData) {
        this.orgData = orgData;
    }
}

我开发的实现只防止枚举成为空对象,有没有办法验证枚举的值是否仅在声明值的范围内? (空的、全职的、兼职的、合同的、休闲的)

【问题讨论】:

  • 还能是什么?如果某物设法生成类的 有效 实例(具有非空 employmentType),则它必须具有这些值之一。这就是enums 的工作方式......

标签: java enums bean-validation


【解决方案1】:

我相信您必须验证 valueOf 或枚举的名称 这是使验证发生的摘录

public class Employment implements Serializable {

@NotNull(message = "employmentType does not accept null values")
@Valid
private EmploymentType employmentType;

public EmploymentType getEmploymentType() {
    getEmploymentTypeOfEnum();
    return employmentType;
} 

@Pattern(regexp = "EMPTY|FULL")
private String getEmploymentTypeOfEnum(){ // you don't need it to be public
     return employmentType.name();
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多