我正在尝试使用 javax.validation 验证一些 DTO,但似乎注释 @NotEmpty 不会检查参数是否为 null。
\n\n这是我的课程:
\n\nPerson.class
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n职级
\n\npublic 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}\nRun 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 }\nRun Code Online (Sandbox Code Playgroud)\n\n这是验证 DTO 的方法:
\n\npublic 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}\nRun Code Online (Sandbox Code Playgroud)\n\n我的印象是@NotEmpty首先检查参数是否为空,\xc2\xbfam我错了?
\n\nPD:这是我使用的依赖项:
\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>\nRun Code Online (Sandbox Code Playgroud)\n\n问题似乎出在依赖项上,由于某种原因,在类路径中,validation-api 的 jar 版本是错误的,我只是删除了类路径中的所有 jar,然后再次添加它们,错误就消失了。
\n| 归档时间: |
|
| 查看次数: |
10335 次 |
| 最近记录: |