Spring Недопустимое свойство класса бина при использовании беглых геттеров
Я не могу отклонить значения по имени поля во время проверки в моем пользовательском валидаторе, который реализует org.springframework.validation.Validator. Единственное отличие от стандартного случая состоит в том, что я использую беглые геттеры в своем доменном объекте.
@Value
@Builder(toBuilder = true)
@Validated
public class Customer {
private String nick;
// Lombok generated fluent getters
}
Регистрация моего собственного валидатора, как это:
@InitBinder
public void dataBinding(WebDataBinder binder) {
binder.addValidators(CustomerRequestValidator);
}
Выполнение некоторой пользовательской проверки в валидаторе, но я не могу отклонить любое значение по полю в org.springframework.validation.Errors. Всегда получаю это:
org.springframework.beans.NotReadablePropertyException: Invalid property 'nick' of bean class [my.package.Customer]: Bean property 'nick' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
Как я могу получить эти имена полей в класс бина?
По иронии судьбы, если проверка выполняется на полях с @NotNull до пользовательской проверки, ошибки заполняются с правильным именем поля. Я думаю, что исключение возникает, когда Spring пытается получить значение по имени поля и не может найти поле.
Один из вариантов заключается в том, чтобы lombok генерировал как текущие, так и стандартные геттеры (невозможно, см. Как создать как стандартные, так и текущие методы доступа с помощью lombok?)
Другой подход состоит в том, чтобы всегда вызывать error.rejectValue без имени поля и вставлять fieldName и значение в сообщение, а затем декодировать его в обработчике ошибок.
Есть ли у вас какие-либо советы, как это сделать? Возможно, какой-нибудь способ настроить Spring (WebDataBinder) для использования беглых геттеров?