2013-10-03 96 views
1

以下是我的POJO:java.lang.NoSuchMethodException:未知屬性

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' 

但這兩個字段是可用的,我得到t他上面的例外只適用於上述兩個領域,其餘的工作都很好。

那麼可能會導致這個問題呢?

感謝

+2

http://geosoft.no/development/javastyle.html#Naming約定 –

+0

下來選民應該關心評論:) –

+0

沒有理由落後於下跌如果投票下來的選民不提供理由。 – SAR

回答

3

正確的屬性名稱將開始lowecase:merchant_UTRsettled_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(); 
    } 
} 
+0

修正了這個問題,正如指出的那樣。 :) +1 –

+1

這真的很有幫助。謝謝 –

4

使用merchant_UTR和settled_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()); 
+0

你是對的:)總是四隻眼睛做魔術+1 –

+0

downvoters我知道我的答案中有什麼問題嗎? – SpringLearner

+0

由於Peter Walser提供了有效的代碼編寫方式,所以我沒有接受你的答案。所以我必須通過接受他的答案來感謝他,這將有助於他人編寫更好的代碼。 –