#java #maven #validation #console
#java #maven #проверка #консоль
Вопрос:
Вот мой простой демонстрационный код Java:
package com.demo;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
public class App {
public static void main(String[] args) {
@Valid @NotNull Object x = null;
System.out.println("Shouldn't print this!");
}
}
И это моя конфигурация Maven:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitled1</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
</project>
Вывод:
Shouldn't print this!
Ожидаемое поведение — выдача исключения с ошибкой проверки.
Почему этот простой код работает не так, как ожидалось?
Комментарии:
1. Аннотации сами по себе ничего не делают. Для каждой аннотации требуется какой-то процессор для обработки аннотаций (вы можете рассматривать аннотации как подсказки). Здесь вам нужен процессор проверки, чтобы заставить его работать. Взгляните на baeldung.com/javax-validation
Ответ №1:
В качестве зависимости у вас есть api проверки bean, вы могли бы использовать подобную реализацию hibernate-validator
, которая транзитивно извлекает api проверки.
В среде Java SE вам также понадобится реализация EL.
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version></version>
</dependency>
Обычно вы используете для проверки атрибутов класса типа сущности, просто в качестве примера приведенный ниже класс имеет атрибут, который не должен быть нулевым.
public class ValidationExample {
@NotNull
private Object name;
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<ValidationExample>> violations = validator.validate(new ValidationExample());
for (ConstraintViolation<ValidationExample> violation : violations) {
System.out.println(violation.getMessage());
}
}
}
Должно дать:
INFO: HV000001: Hibernate Validator 6.1.6.Final
must not be null
Подробнее здесь: средство проверки гибернации