3

JSON を解析していて、エンティティの 1 つにデフォルトのコンストラクターがないという例外が発生しました。コードは次のとおりです。

public class MyPromosResponse extends BaseResponse {

    public MyPromosResponseData response;

    public MyPromosResponse() {
    }

    public TreeSet<Promo> getMyPromosResponseData() {
        return new TreeSet<Promo>(response.getEvents());
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    class MyPromosResponseData {
        public ArrayList<Promo> events;
        public ArrayList<Table1PromoData> Table1;

        public MyPromosResponseData() {
        }

        public ArrayList<Promo> getEvents() {
            return events;
        }

        ArrayList<Table1PromoData> getTable1() {
            return Table1;
        }

    }

    class Table1PromoData {
        public int id;
        public int eventid;
        public int cardholderid;

        public Table1PromoData() { // Here is the constructor.
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public int getEventid() {
            return eventid;
        }

        public void setEventid(int eventid) {
            this.eventid = eventid;
        }

        public int getCardholderid() {
            return cardholderid;
        }

        public void setCardholderid(int cardholderid) {
            this.cardholderid = cardholderid;
        }
    }

}

ネストさTable1PromoDataれたクラスを使用すると、デフォルトのコンストラクターが見つからないというエラーが発生しますが、パブリックコンストラクターが定義されています。それを別のファイルに移動すると、すべて問題ありません.libはコンストラクターを見つけます。

別のファイルに移動した後、既定のコンストラクターが表示されるのはなぜですか?

4

2 に答える 2

9

内部クラスも public、private、または protected になる可能性があるためです。指定しない場合は非公開になり、クラスの外では見ることができません。クラスをパブリックとして宣言する必要があります。

于 2013-04-29T15:25:51.970 に答える
3

内部クラスが静的でない場合、JSON シリアライザー (具体的には Jackson) で問題が発生しました。明らかに、内部クラスが静的でない場合、デフォルトのコンストラクターが台無しになります。

于 2013-04-29T15:26:08.103 に答える