Как пользовательские сообщения валидатора Hibernate 6 отображаются из файла свойств? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь получить пользовательское сообщение об ошибке из файла свойств.Хотя я внимательно читаю онлайн-руководство по 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());
}

}

Класс автомобиля:

 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: enter image description here

1 Ответ

1 голос
/ 19 марта 2019

Чтобы установить пользовательское сообщение в спящем режиме, попробуйте использовать поле «сообщение» в аннотации.

Например:

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