Почему propertyName в конструкторе PropertyPath не соответствует спецификации Javabeans?

Кажется, что имя переменной propertyName в конструкторе класса PropertyPath не соответствует спецификации JavaBeans (8.8 Использование заглавных букв в названии.).

https://github.com/spring-projects/spring-data-commons/blob/master/src/main/java/org/springframework/data/mapping/PropertyPath.java

// PropertyPath Code: lines 73:
PropertyPath(String name, TypeInformation<?> owningType, List<PropertyPath> base) {
...
    String propertyName = name.matches(ALL_UPPERCASE) ? name : StringUtils.uncapitalize(name);
...
}

Код означает, что первая заглавная буква изменяется на строчные, когда имя не соответствует ALL_UPPERCASE.

Но спецификация JavaBeans гласит:

JavaBeans Specification

Thus when we extract a property or event name from the middle of an existing Java name, 
we normally convert the first character to lower case. 
However to support the occasional use of all upper-case names, we check if the first 
two characters of the name are both upper case and if so leave it alone. 
So for example,
    “FooBah” becomes “fooBah”
    “Z” becomes “z”
    “URL” becomes “URL”

Например: если у меня есть свойство с именем [MCount] в классе, имя свойства должно быть [MCount] в соответствии со спецификацией JavaBeans. Но если я получу свойство [PropertyPath.from](которое вызовет конструктор PropertyPath), как показано ниже, я получу следующее исключение, поскольку имя свойства было изменено на [mCount].

PropertyPath property = PropertyPath.from("MCount", classType);

Исключение: java.lang.IllegalArgumentException: невозможно найти атрибут с заданным именем [mCount] в этом ManagedType [class]...

У кого-нибудь есть хорошее мнение? Спасибо!

1 ответ

Это поведение было введено в коммите 0c4ed8a86a для исправления DATACMNS-257, который касается только всех имен свойств в верхнем регистре.

Если вы считаете это ошибкой, пожалуйста, сообщите об этом в трекер проблем.

Другие вопросы по тегам