2016-07-14 26 views
0

Ich habe ein Problem, das ist, wenn ich Smart-JSON, um Java-Bean zu JSON-Objekt zu konvertieren, dann fand ich einige boolean Feld wurde verloren, kann einige Boby mir sagen, warum? die die Codes sind unter:Java Boolean zu 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; 
} 

}

Meine Frage ist, warum die Boolesche Feldwert verloren wurde?

Antwort

0

Dies ist ein Getter gegen -es Problem „ist“:

Code in MyBean ändern, als ich den folgenden Ausschnitt habe, und die Menge der Booleschen ändert in Ihrer MiniDevJSONTest Klasse „setIsReturn“ Übereinstimmen. Sie erhalten jetzt den Wert, nach dem Sie suchen. Nicht sehr vertraut mit den minidev.json-Klassen, aber es scheint unter den Covern eine Reflexion zu geben, die nach dem Getter für Ihren booleschen Wert sucht und nicht nach dem "is" -er. Da es es nicht findet, ist es wie es nicht ist.

Ich habe diese Art von Verhalten schon früher in anderen Bibliotheken gesehen. In einigen Bibliotheken ändert sich die Entscheidung, ob der Code den Iter oder den Getter sucht, je nachdem, ob der gesuchte Boolesche Wert der primitive oder der vollständig eingereihte Typ ist.

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; 
    } 
} 

Nur ein wenig mehr Followup:

in Eclipse, wenn Sie eine Klasse-Attribut für eine Klasse etablieren, wenn Sie die „erstellen Getter und Setter“ verwenden Verknüpfung, werden Sie sehen, dass es automatisch eine erstellt Getter für einen großen B Boolean, und ein Iser für den primitiven Typ.

Viele Bibliotheken verwenden diesen Standard, wenn sie versuchen, das Reflexionsmuster zum Untersuchen einer Klasse herauszufinden. Es scheint jedoch, dass die von Ihnen verwendete Bibliothek dies nicht tut. Ich habe es getestet und erwarte den Getter, ob das Attribut ein Boxed-Typ oder das Primitiv ist.

+0

Hallo Leute vielen Dank, ich habe es total verstanden. –