注解@NotEmpty不检查String是否为null

5 java junit javax.validation

我正在尝试使用 javax.validation 验证一些 DTO,但似乎注释 @NotEmpty 不会检查参数是否为 null。

\n\n

这是我的课程:

\n\n

Person.class

\n\n
public class Person {\n\n    @NotEmpty(message = "mandatoryParametersMissing")\n    private String name;\n\n    @NotNull(message = "mandatoryParametersMissing")\n    @Valid\n    private Job job;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Job getJob() {\n        return job;\n    }\n\n    public void setJob(Job job) {\n        this.job = job;\n    }\n\n    @Override\n    public String toString() {\n        return "Person [name=" + name + ", job=" + job + "]";\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

职级

\n\n
public class Job {\n\n    @NotEmpty(message = "mandatoryParametersMissing")\n    private String name;\n\n    @NotNull(message = "mandatoryParametersMissing")\n    private Integer salary;\n\n    public String getName() {\n        return name;\n    }\n\n    public void setName(String name) {\n        this.name = name;\n    }\n\n    public Integer getSalary() {\n        return salary;\n    }\n\n    public void setSalary(Integer salary) {\n        this.salary = salary;\n    }\n\n    @Override\n    public String toString() {\n        return "Job [name=" + name + ", salary=" + salary + "]";\n    }\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我尝试通过以下 JUnit 测试时,我遇到了失败:

\n\n
@Test(expected = BusinessServiceException.class)\n    public void testJobNameNull() {\n        Person samuel = new Person();\n        samuel.setName("Samuel Antequera");\n        Job programmer = new Job();\n\n        programmer.setSalary(18000);\n        samuel.setJob(programmer);\n\n        validatePerson(samuel);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是验证 DTO 的方法:

\n\n
public void validatePerson(Person in) {\n    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();\n    Validator validator = factory.getValidator();\n\n    Set<ConstraintViolation<Person>> violations = validator.validate(in);\n    for (ConstraintViolation<Person> violation : violations) {\n        throw new BusinessServiceException(violation.getMessage(), violation.getPropertyPath().toString());\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的印象是@NotEmpty首先检查参数是否为空,\xc2\xbfam我错了?

\n\n

PD:这是我使用的依赖项:

\n\n
    <dependency>\n        <groupId>javax.validation</groupId>\n        <artifactId>validation-api</artifactId>\n        <version>2.0.1.Final</version>\n    </dependency>\n\n    <dependency>\n        <groupId>org.hibernate.validator</groupId>\n        <artifactId>hibernate-validator</artifactId>\n        <version>6.1.0.Alpha5</version>\n    </dependency>\n\n    <dependency>\n        <groupId>org.hibernate.validator</groupId>\n        <artifactId>hibernate-validator-annotation-processor</artifactId>\n        <version>6.1.0.Alpha5</version>\n    </dependency>\n\n    <dependency>\n        <groupId>javax.el</groupId>\n        <artifactId>javax.el-api</artifactId>\n        <version>3.0.1-b06</version>\n    </dependency>\n\n    <dependency>\n        <groupId>org.glassfish.web</groupId>\n        <artifactId>javax.el</artifactId>\n        <version>2.2.6</version>\n    </dependency>\n\n<dependency>\n    <groupId>junit</groupId>\n    <artifactId>junit</artifactId>\n    <version>4.12</version>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n\n

问题似乎出在依赖项上,由于某种原因,在类路径中,validation-api 的 jar 版本是错误的,我只是删除了类路径中的所有 jar,然后再次添加它们,错误就消失了。

\n

小智 0

问题似乎出在依赖项上,由于某种原因,在类路径中,validation-api 的 jar 版本是错误的,我只是删除了类路径中的所有 jar,然后再次添加它们,错误就消失了。