1

jason を単独で Java に解析するための 2 つの Java クラスがあります。それを超えて、クラスは何にも使用されません。以下は2つのクラスです。

import java.util.ArrayList;

public class PaymentsPaid {

    public ArrayList<PaidDetailAmounts> amount;
}

public class PaidDetailAmounts {

    public Long invoiceFeeId;

    public Double amountPaid;
}

ここで、文字列とオブジェクト マッパーを使用します。

 "amount": [{"invoiceFeeId": 12085, "amountPaid": 100},{"invoiceFeeId": 12084, "amountPaid": 100},{"invoiceFeeId": 12086, "amountPaid": 500}]

とマッパーコード

ObjectMapper mapper = new ObjectMapper();        
try {
    PaymentsPaid paymentsPaidModel = mapper.readValue(httpServletRequest.getParameter("amount"), PaymentsPaid.class);
   /*
    Iterator<PaidDetailAmounts> iterator = paymentsPaidModel.amount.iterator();
    while (iterator.hasNext()) {
        System.out.println(iterator.next().invoiceFeeId);
    }
    */
} catch (JsonParseException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

これは私の例外です:

org.codehaus.jackson.map.exc.UnrecognizedPropertyException: 認識されないフィールド "invoiceFeeId" (クラス PACKAGE_NAME.PaymentsPaid)、無視できるとマークされていません

私はこのアプローチを使用して検索機能を構築し、それが現在私のアプリケーションにあり、うまく機能しているので、私は何かをしているに違いありません。お知らせ下さい。配列でなければならないので、間違った形式のjson文字列である可能性があると思います。

4

1 に答える 1

1

問題は、jackson が class のinvoiceFeeIdフィールドにアクセスしようとしていることにありますPaymentsPaidが、それは class のフィールドですPaidDetailAmounts

Json文字列にいくつかの周囲の括弧が欠けていると思います:

{  // <-- missing?
  "amount": [{"invoiceFeeId":...}]
}  // <-- missing?

しかし、私は JSON の専門家ではないので、いくつかの Java オブジェクトから JSON 文字列を作成し、この文字列を解析して Java オブジェクトに戻す簡単なテスト ケースを作成してみます。そのため、テストは両方の (セットの) オブジェクトが等しいと断言できます。

次に、テストによって作成された JSON 文字列を使用して、それを入力と比較できます。(欠落している) ブラケットがそれらの違いであると予想されます。

于 2012-11-09T07:51:44.377 に答える