Java Bean Boolean 归档至 JSON & Boolean vs Boolean



我遇到了一个问题,当我使用 smart-json 将 java bean 转换为 JSON 对象时,我发现一些布尔文件丢失了,一些 boby 可以告诉我为什么吗? 世卫组织代码如下:

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

}

我的问题是为什么布尔字段值丢失了?

这是一个

getter与"is"-er的问题:

修改MyBean中的代码,因为我有以下代码片段,并更改MiniDevJSONTest类中的布尔值集以匹配"setIsReturn"。您现在将获得所需的价值。对minidev.json类不是很熟悉,但是在封面下似乎正在进行反射,它正在寻找布尔值的获取器,而不是"is"-er。既然找不到,就好像它不存在一样。

我以前在其他图书馆见过这种行为。在某些库中,代码是查找 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 中,当您为类建立类属性时,如果使用"创建 getter 和 setter"快捷方式,您将看到它会自动为大 B 布尔值创建一个 getter,并为基元类型创建一个 is-er。

许多库在尝试找出用于检查类的反射模式时使用此标准。但是,您正在使用的库似乎没有。我测试了它,它期待 getter 属性是盒装类型还是基元。

最新更新