第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用杰克遜序列化空值

用杰克遜序列化空值

DIEA 2022-12-21 13:04:54
我正在嘗試使用自定義序列化程序通過 jackson 序列化一些可以為空的字段。在線閱讀似乎杰克遜應(yīng)該寫一個“空”字符串,如果我想要不同的輸出,我應(yīng)該從它的官方 github 中遵循這個例子問題是我得到了 NullPointerException 而不是“空”字符串。JsonGenerator.writeNumberField 和 JsonGenerator.writeStringField 都會發(fā)生這種情況。要寫一個空字符串,我應(yīng)該管理異常,還是我遺漏了什么?這是堆棧跟蹤:com.fasterxml.jackson.databind.JsonMappingException: [no message for java.lang.NullPointerException]    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._wrapAsIOE(DefaultSerializerProvider.java:509) ~[jackson-databind-2.9.6.jar:2.9.6]    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:482) ~[jackson-databind-2.9.6.jar:2.9.6]    at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) ~[jackson-databind-2.9.6.jar:2.9.6]    at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3905) ~[jackson-databind-2.9.6.jar:2.9.6]    at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3219) ~[jackson-databind-2.9.6.jar:2.9.6]    at petmenu.restControllers.ProdottoController.thirdStageInput(ProdottoController.java:92) ~[main/:na]    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_202]    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_202]    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_202]    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_202]這是有趣的代碼   @Override    public void serialize(      Prodotto prod, JsonGenerator jgen, SerializerProvider serializer) throws IOException {        jgen.writeStartObject();//      getPeso_netto returns an Integer, that in the example is null        jgen.writeNumberField("peso_netto", prod.getPeso_netto());
查看完整描述

1 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊

我建議簡單地進(jìn)行空檢查,或者如您所言,通過異常處理。


@Override

    public void serialize(

      Prodotto prod, JsonGenerator jgen, SerializerProvider serializer) throws IOException {

        jgen.writeStartObject();


//      getPeso_netto returns an Integer, that in the example is null

        if (prod.getPeso_netto() != null)

            jgen.writeNumberField("peso_netto", prod.getPeso_netto());

        else {

            jgen.writeNullField("peso_netto");     

        }


編輯說明

JsonGenerator.writeNumberField 方法具有以下方法主體:


public final void writeNumberField(String fieldName, int value) throws IOException {

    this.writeFieldName(fieldName);

    this.writeNumber(value);

}

如您所見,該方法需要一個 int,而不是 Integer。編譯器試圖將 Integer 自動裝箱為 int。NPE 失敗,因為 Integer 是空對象。因此,NPE 不是“由 jackson 庫的代碼”拋出的,而是在試圖將自動裝箱的空值作為 int 傳遞給 jackson 方法時從 JVM 拋出的。


您可以使用以下代碼段測試此行為:


Integer x = null;

x = 1 + x; // will throw NPE


查看完整回答
反對 回復(fù) 2022-12-21
  • 1 回答
  • 0 關(guān)注
  • 147 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號