Nano Hash - криптовалюты, майнинг, программирование

java.lang.NoSuchMethodException: неизвестное свойство

следующее мое pojo:

package anto.com.poc;
public class VerifyPaymentRO {

private String mihpayid;
private String request_id;
private String bank_ref_num;
private String amt;
private String disc;
private String mode;
private String PG_TYPE;
private String card_no;
private String name_on_card;
private String udf2;
private String addedon;
private String status;
private String unmappedstatus;
private String Merchant_UTR;
private String Settled_At;

public String getMihpayid() {
    return mihpayid;
}
public void setMihpayid(String mihpayid) {
    this.mihpayid = mihpayid;
}
public String getRequest_id() {
    return request_id;
}
public void setRequest_id(String request_id) {
    this.request_id = request_id;
}
public String getBank_ref_num() {
    return bank_ref_num;
}
public void setBank_ref_num(String bank_ref_num) {
    this.bank_ref_num = bank_ref_num;
}
public String getAmt() {
    return amt;
}
public void setAmt(String amt) {
    this.amt = amt;
}
public String getDisc() {
    return disc;
}
public void setDisc(String disc) {
    this.disc = disc;
}
public String getMode() {
    return mode;
}
public void setMode(String mode) {
    this.mode = mode;
}
public String getPG_TYPE() {
    return PG_TYPE;
}
public void setPG_TYPE(String pG_TYPE) {
    PG_TYPE = pG_TYPE;
}
public String getCard_no() {
    return card_no;
}
public void setCard_no(String card_no) {
    this.card_no = card_no;
}
public String getName_on_card() {
    return name_on_card;
}
public void setName_on_card(String name_on_card) {
    this.name_on_card = name_on_card;
}
public String getUdf2() {
    return udf2;
}
public void setUdf2(String udf2) {
    this.udf2 = udf2;
}
public String getAddedon() {
    return addedon;
}
public void setAddedon(String addedon) {
    this.addedon = addedon;
}
public String getStatus() {
    return status;
}
public void setStatus(String status) {
    this.status = status;
}
public String getUnmappedstatus() {
    return unmappedstatus;
}
public void setUnmappedstatus(String unmappedstatus) {
    this.unmappedstatus = unmappedstatus;
}
public String getMerchant_UTR() {
    return Merchant_UTR;
}
public void setMerchant_UTR(String merchant_UTR) {
    Merchant_UTR = merchant_UTR;
}
public String getSettled_At() {
    return Settled_At;
}
public void setSettled_At(String settled_At) {
    Settled_At = settled_At;
}


}

и я пытаюсь установить значения во время выполнения следующим образом:

static public VerifyPaymentRO convertToVerifyPaymentPOJO(String verifyPaymentInfo) {
        VerifyPaymentRO verifyPaymentRO = new VerifyPaymentRO();
        String[] verifyPaymentComma=null;
        String[] verifyPayment=null;
        String value="";

        verifyPaymentComma = verifyPaymentInfo.trim().split(",");
        for (String verifyPaymentCommaSeparated : verifyPaymentComma) {
            verifyPayment = verifyPaymentCommaSeparated.trim().split("=");
            if(verifyPayment.length==2){
                value=verifyPayment[1];
            }else{
                value="";
            }

             try {

                 if(verifyPayment[0].trim().equals("mihpayid"))
                     PropertyUtils.setProperty(verifyPaymentRO, "mihpayid", value.trim());
                 if(verifyPayment[0].trim().equals("request_id"))
                     PropertyUtils.setProperty(verifyPaymentRO, "request_id", value.trim());
                 if(verifyPayment[0].trim().equals("bank_ref_num"))
                     PropertyUtils.setProperty(verifyPaymentRO, "bank_ref_num", value.trim());
                 if(verifyPayment[0].trim().equals("amt"))
                     PropertyUtils.setProperty(verifyPaymentRO, "amt", value.trim());
                 if(verifyPayment[0].trim().equals("disc"))
                     PropertyUtils.setProperty(verifyPaymentRO, "disc", value.trim());
                 if(verifyPayment[0].trim().equals("mode"))
                     PropertyUtils.setProperty(verifyPaymentRO, "mode", value.trim());
                 if(verifyPayment[0].trim().equals("PG_TYPE"))
                     PropertyUtils.setProperty(verifyPaymentRO, "PG_TYPE", value.trim());
                 if(verifyPayment[0].trim().equals("card_no"))
                     PropertyUtils.setProperty(verifyPaymentRO, "card_no", value.trim());
                 if(verifyPayment[0].trim().equals("name_on_card"))
                     PropertyUtils.setProperty(verifyPaymentRO, "name_on_card", value.trim());
                 if(verifyPayment[0].trim().equals("udf2"))
                     PropertyUtils.setProperty(verifyPaymentRO, "udf2", value.trim());
                 if(verifyPayment[0].trim().equals("addedon"))
                     PropertyUtils.setProperty(verifyPaymentRO, "addedon", value.trim());
                 if(verifyPayment[0].trim().equals("status"))
                     PropertyUtils.setProperty(verifyPaymentRO, "status", value.trim());
                 if(verifyPayment[0].trim().equals("unmappedstatus"))
                     PropertyUtils.setProperty(verifyPaymentRO, "unmappedstatus", value.trim());
                 if(verifyPayment[0].trim().equals("unmappedstatus"))
                     PropertyUtils.setProperty(verifyPaymentRO, "unmappedstatus", value.trim());
                 if(verifyPayment[0].trim().equals("Merchant_UTR"))
                     PropertyUtils.setProperty(verifyPaymentRO, "Merchant_UTR", value.trim());
                 if(verifyPayment[0].trim().equals("Settled_At"))
                     PropertyUtils.setProperty(verifyPaymentRO, "Settled_At", value.trim());

                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                }



        }

        return verifyPaymentRO;
    }

все работает нормально, но для последних двух свойств я получаю следующее исключение:

1. java.lang.NoSuchMethodException: Unknown property 'Merchant_UTR' on class 'class anto.com.poc.VerifyPaymentRO'

2. java.lang.NoSuchMethodException: Unknown property 'Settled_At' on class 'class anto.com.poc.VerifyPaymentRO'

но эти два поля доступны, и я получаю указанное выше исключение только для двух указанных выше полей, а остальные работают нормально.

так что может вызвать проблему?

Благодарность


  • geosoft.no/development/javastyle.html#Naming 03.10.2013
  • проголосовавшие должны позаботиться о комментариях :) 03.10.2013
  • нет причин для голосования против, если голосующий против не указал причину. 03.10.2013

Ответы:


1

Правильные имена свойств должны начинаться с нижнего регистра: merchant_UTR и settled_At.

Кстати, избыточность в вашем коде вредит, а также делает ваш код очень подверженным ошибкам (ошибки копирования и вставки). Почему бы не переписать его примерно так:

List<String> validProperties = Arrays.asList("mihpayid", "request_id", "bank_ref_num", ...);
String property = verifyPayment[0].trim();
if (validProperties.contains(property)) {
    try {
        PropertyUtils.setProperty(verifyPaymentRO, property, value.trim());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
03.10.2013

2

используйте торговец_UTR и расселенный_At В последних двух методах

if(verifyPayment[0].trim().equals("Merchant_UTR"))
                     PropertyUtils.setProperty(verifyPaymentRO, "merchant_UTR", value.trim());
                 if(verifyPayment[0].trim().equals("Settled_At"))
                     PropertyUtils.setProperty(verifyPaymentRO, "settled_At", value.trim());
03.10.2013
  • Я не принял ваш ответ, так как Питер Вальзер также предоставил эффективный способ написания кода. поэтому я должен поблагодарить его, приняв его ответ, который поможет другим написать лучший код. 03.10.2013
  • :) +1 мой и пофиг чей -1 03.10.2013
  • Я также дал вам +1, так как ваш ответ был на пару секунд быстрее, чем мой :) 03.10.2013
  • @PeterWalser Если мой ответ неверен, я заслуживаю отрицательного голоса, чтобы исправить свою ошибку. Вот почему я попросил тех, кто проголосовал против, сказать, что не так. 03.10.2013
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..