#java #hibernate #validation
#java #переход в режим гибернации #проверка
Вопрос:
Я пытаюсь отобразить пользовательское сообщение об ошибке из файла свойств. Хотя я внимательно читаю онлайн-руководство по Hibernate 6, и средство проверки действительно работает, приведенный ими пример не показывает пользовательскую ошибку. Я пытался переименовать класс в файле свойств в ‘Car’ вместо ‘car’ и пробовал разные классы ошибок, такие как Min или Max, но сообщения об ошибках по умолчанию будут отображаться всегда. Я подозреваю, что какая-то проблема с форматом или наименованием файла свойств, но я не знаю, как его следует форматировать. Основной класс:
package fieldConstraints;
import java.util.Set;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator;
import methodParameterConstraints.RentalStation;
public class Main {
public static void main(String[] args) {
//An instance of validator is created, with the custom message resource included
Validator validator = Validation.byDefaultProvider().configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(new PlatformResourceBundleLocator("MyMessages.properties")))
.buildValidatorFactory().getValidator();
Car Accord = new Car();
//A null value is applied to the licensePlate variable
Set<ConstraintViolation<Car>> violations = validator.validateValue(
Car.class,
"licensePlate",
null
);
//When getting the error message it will still display the default.
for(ConstraintViolation<Car> violation : violations){
System.out.println(violation.getMessage());
}
System.out.println(Accord.toString());
}
}
Класс Car:
package fieldConstraints;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class Car {
//For this class, the basic class variables are annotated with constraints so that when
//an instance is created , it must abide by these parameters.
@NotNull
private String manufacturer;
public Car() {
//default constructor
}
@NotNull
@Size(min = 2, max = 14)
//Constraints can be applied to fields of any access type (public, private etc.). Constraints on static fields are not supported, though.
private String licensePlate;
@Min(2)
@Max(6)
private int seatCount;
public Car(String manufacturer, String licencePlate, int seatCount) {
this.manufacturer = manufacturer;
this.licensePlate = licencePlate;
this.seatCount = seatCount;
}
//Contructors, getters setters...
}
Файл myMessages.properties:
Size.car.licensePlate = custom message here.
Min.car.seatCount = custom message: min 2 seats.
Max.car.seatCount = custom message: max 6 seats.
NotNull.car.manufacturer = custom message: manufacturer can't be null.
Ответ №1:
Чтобы установить пользовательское сообщение в режиме гибернации, попробуйте использовать поле «сообщение» в аннотации.
Например:
@NotNull(message = "licensePlate cannot be null."
@Size(min = 2, max = 14, message = "Size of licensePlate needs to be between 2 and 14.")
private String licensePlate;
Комментарии:
1. Да, это вариант, но я пытался воспроизвести способ извлечения сообщений из одного центрального файла в документации Hibernate 6.0. Допустим, вам пришлось перевести приложение с английского на испанский, и вы хотели просто указать на новый файл, а не перепечатывать каждое сообщение об ошибке.