2016-07-14 6 views
0

私はsmart-jsonを使用してJSONオブジェクトに変換するときに問題が発生しましたが、いくつかのブール値が失われていることがわかりました。誰のコードは以下の通りです:java bean booleanがjson&boolean vs Booleanに書き込まれました

package com.huoli.crawler.test; 

import java.util.HashMap; 
import java.util.Map; 

import net.minidev.json.JSONObject; 


public class MiniDevJSONTest { 
public static void main(String[] args) { 
    MyBean mybean = new MyBean(); 
    mybean.setReturn(true); 
    mybean.setArrivingAirportCode("dadsa"); 
    Map<String, MyBean> map = new HashMap<>(); 
    map.put("mybean", mybean); 
    // output smart-json:{"mybean":{"arrivingAirportCode":"dadsa"}} 
    // so where is isRetrun ?? 
    System.out.println("smart-json:" + JSONObject.toJSONString(map)); 

} 

}

class MyBean { 
private boolean isReturn; 

public boolean isReturn() { 
    return isReturn; 
} 

public void setReturn(boolean isReturn) { 
    this.isReturn = isReturn; 
} 

private String arrivingAirportCode; 

public String getArrivingAirportCode() { 
    return arrivingAirportCode; 
} 

public void setArrivingAirportCode(String arrivingAirportCode) { 
    this.arrivingAirportCode = arrivingAirportCode; 
} 

}

ブールフィールドの値が失われた理由私の質問はありますか?

答えて

0

これは-er問題「である」対ゲッターです:

は、私は次のコードを持っているようMyBeanとのあなたのコードを変更し、「setIsReturn」を合わせてMiniDevJSONTestクラスでブールのセットを変更。あなたは今あなたが探している価値を得るでしょう。 minidev.jsonクラスにはあまりよく慣れていませんが、 "is"ではなくboolean値のゲッターを探しているカバーの下には反射が起こっているようです。それを見つけることができないので、そこにはないようです。

これまで他のライブラリでこのような動作が見られました。いくつかのライブラリでは、あなたが探しているブール値がプリミティブ型か完全なボクシング型かどうかに基づいて、コードがis-erまたはgetterの変更を求めるかどうかの選択肢があります。

public class MyBean { 
    private boolean isReturn; 
    private String arrivingAirportCode; 

    public boolean getIsReturn() { 
    return isReturn; 
    } 

    public void setIsReturn(boolean isReturn) { 
    this.isReturn = isReturn; 
    } 

    public String getArrivingAirportCode() { 
    return arrivingAirportCode; 
    } 

    public void setArrivingAirportCode(String arrivingAirportCode) { 
    this.arrivingAirportCode = arrivingAirportCode; 
    } 
} 

ただ、もう少しフォロー:Eclipseで

、あなたは「ゲッターとセッターを作成する」のショートカットを使用している場合、あなたはそれが自動的に作成されますことがわかります、クラスのクラス属性を確立Bブール値が大きい場合はgetter、プリミティブ型の場合はis-erです。

クラスを検査するためのリフレクションパターンを把握しようとするとき、多くのライブラリがこの標準を使用します。しかし、使用しているライブラリには表示されません。私はそれをテストし、属性がボックス型かプリミティブ型かをgetterに期待しています。

+0

こんにちは、ありがとう、私はそれを完全に得ました。 –

関連する問題