PropertyUtils.getProperty завершается ошибкой при попытке получить простое значение свойства - PullRequest
5 голосов
/ 23 сентября 2011

У меня странная проблема с методом PropertyUtils.getProperty(bean, fieldName), где я получил java.lang.NoShuchMethodException.

Предположим, у нас есть простой класс Java под названием pojo:

public class Pojo {
    public java.util.Date aDate;
    public java.util.Date theDate;

    public Pojo(){}
}

икласс вызывающей стороны, такой как

public class TestPojo{
    public static void main(String[] args){
        Pojo p = new Pojo();
        p.setADate(new Date());
        p.setTheDate(new Date());

        PropertyUtils.getProperty(p, "theDate");
        PropertyUtils.getProperty(p, "aDate");
    }
}

Первый вызов PropertyUtils.getProperty работает нормально, а второй вызовет throw NoSuchMethodExeption.

Я хотел бы знать, если япропустить что-то глупое или это действительно ошибка:)

Ответы [ 4 ]

6 голосов
/ 23 сентября 2011

Посмотрите на это сообщение об ошибке

В спецификации Java Bean в разделе «8.8 Использование заглавных букв в именах» говорится, что, когда первый символ преобразуется в нижний регистр, если толькопервые два символа - оба в верхнем регистре, затем имя свойства «без изменений».

Адаптация остального для вас ( курсив ):

Итакесли у вас есть метод получения с именем "getADate" , он переводится в имя свойства "ADate" , а не "aDate" .

Таким образом, чтобы решить вашу проблему, у вас есть два варианта:

  • использовать имя свойства "ADate" или
  • изменить имена методов на "getaDate" и "setaDate"
4 голосов
/ 23 сентября 2011

Я не понимаю, как PropertyUtils.getProperty(p, "TheDate"); может работать, поскольку имя свойства неверно.

Попробуйте это:

public class TestPojo{
    public static void main(String[] args){
        Pojo p = new Pojo();
        p.setADate(new Date());
        p.setTheDate(new Date());

        PropertyUtils.getProperty(p, "theDate");
        PropertyUtils.getProperty(p, "aDate");
    }
}

Ссылка на метод PropertyUtils

Чтобы решить вашу проблему, есть два решения:

  • вместо этого использовать имя свойства "ADate"
  • измените имена методов доступа на getaDate () и setaDate (Date dateToSet)

Как сказал Хави, это заявленная ошибка

2 голосов
/ 23 сентября 2011

Может быть, вам нужно использовать:

PropertyUtils.getProperty(p, "ADate");

где A в верхнем регистре

1 голос
/ 23 сентября 2011

Попробуйте

PropertyUtils.getProperty(p, "ADate");

вместо

PropertyUtils.getProperty(p, "aDate");
...