Как пользовательские сообщения средства проверки Hibernate 6 отображаются из файла свойств?

#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. 
  

Настройка файла проекта в Eclipse:
введите описание изображения здесь

Ответ №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. Допустим, вам пришлось перевести приложение с английского на испанский, и вы хотели просто указать на новый файл, а не перепечатывать каждое сообщение об ошибке.