java.lang.NoSuchMethodException:未知属性
以下是我的pojo:java.lang.NoSuchMethodException:未知属性,java,reflection,apache-commons,pojo,Java,Reflection,Apache Commons,Pojo,以下是我的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 car
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'
但这两个字段都是可用的,我只得到上面两个字段的例外,其余的都正常工作
那么是什么导致了这个问题呢
谢谢使用商户UTR并在 在最后两种方法中
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());
正确的财产名称将从以下情况开始:
merchant\u UTR
和在
结算
顺便说一句,代码中的冗余会造成伤害,也会使代码非常容易出错(复制粘贴错误)。为什么不改写成这样:
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();
}
}
List validProperties=Arrays.asList(“mihpayid”、“request\u id”、“bank\u ref\u num”、…);
String属性=verifyPayment[0]。trim();
if(有效属性包含(属性)){
试一试{
PropertyUtils.setProperty(verifyPaymentRO,property,value.trim());
}捕获(例外e){
e、 printStackTrace();
}
}
Conventionsdown选民应该注意发表评论:)如果被否决的选民不提供理由,就没有理由否决投票。我不接受你的回答,因为Peter Walser也提供了编写代码的有效方法。因此,我必须感谢他接受他的答案,这将有助于其他人编写更好的代码。:+1是我的,不在乎谁的是-1我也给了你+1,因为你的答案比我的快了几秒钟:)@PeterWalser如果我的答案错了,那么我应该投下一票,这样我就可以纠正我的错误。这就是为什么我要求投下一票的人说什么不对