最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Jackson 處理 null 或者 空字符串

 更新時(shí)間:2021年08月19日 09:17:04   作者:wangyun522  
這篇文章主要介紹了使用Jackson 處理 null 或者 空字符串,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Jackson 處理 null 或者 空字符串

Retrofit 配合 Jackson 反序列化,就是將字符串解析為java bean 對象 的時(shí)候 ,如果遇到服務(wù)端由于各種原因會導(dǎo)致 有些String類型的字段值為null ,需要替換為空字符串或者占位符“-”什么的,并且不確定 到底會在哪個(gè)字段,可以如下處理

這里要區(qū)分序列化和反序列化

序列化,就是處理java bean對象轉(zhuǎn)換為字符串,通常設(shè)置

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

這樣在java bean中對象有值為null ,就不會將這個(gè)字段或?qū)傩孕蛄谢癁樽址?/p>

或者在java bean 模型定義中注解,表明不將其序列化

@JsonInclude(JsonInclude.Include.NON_NULL)

反序列化,就是將服務(wù)器端返回的json串轉(zhuǎn)換為java 對象,通常在處理null值, 將某些值更改為指定格式也類似。可以如下操作

在使用jackson 的時(shí)候,通常會通過 compile ‘com.squareup.retrofit2:converter-jackson:2.3.0'集成 官方的 JacksonConverterFactory ,其實(shí)它除了自動引入jackson外,另外引入了三個(gè)類,可以拷貝出來,方便修改引用,其中只需要更改 JacksonConverterFactory.java 中的create函數(shù)即可。針對反序列化過程中String類型處理,添加自定義反序列化器。

public static JacksonConverterFactory create() {
        ObjectMapper objectMapper = new ObjectMapper();
        SimpleModule module = new SimpleModule();
        module.addDeserializer(String.class, new CustomStringDeserializer());
        objectMapper.registerModule(module);
        return create(objectMapper);
    }

其中 CustomStringDeserializer.java 如下 ,重要的就是 getNullValue()的覆寫,它決定了如果 反序列化json串中有一個(gè)字段的值是 null, 處理策略,這里是默認(rèn)返回“-”。

public class CustomStringDeserializer extends JsonDeserializer<String> {
    @Override
    public String deserialize(JsonParser jsonparser,
                              DeserializationContext deserializationcontext) throws IOException,
            JsonProcessingException {
        return jsonparser.getText();
    }
    @Override
    public String getNullValue() {
        return "-";
    }
}

這是全局處理情況,如果是類級別的,需要在類上加反序列器,但要處理的就不只是String了,類中所有字段你都需要處理,因?yàn)檫@時(shí),返回的是一個(gè)類,

public class CustomClassDeserializer extends JsonDeserializer<T> {
    @Override
    public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        return null;
    }
}

然后在類的bean上使用注解,表明該類用這個(gè)反序列化器來處理

@JsonDeserialize(using = CustomClassDeserializer.class)
class yourClass()

如果是字段屬性級別的

需要在相應(yīng)的字段屬性上這樣使用

@JsonDeserialize(using = CustomStringDeserializer.class)
private String name;

還有一種情形是反序列化的時(shí)候如果字段是形如“”的空字符串,想轉(zhuǎn)換成null,那就不需要覆寫 getNullValue() ,直接在deserialize中處理就好。

jackson解決:null到"", 空值處理為空串

1.一個(gè)比較頭疼的問題

jackson + spring 支持rest接口,輸出的JSON 對于null的字符串是invoiceTitle: null,但是接受方希望返回的是invoiceTitle: ""。解決方法重寫ObjectMapper

2.代碼如下

public class MyJsonMapper extends ObjectMapper{
  public MyJsonMapper(){
    super();
    this.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {  
      @Override  
      public void serialize(Object value, JsonGenerator jg, SerializerProvider sp) throws IOException, JsonProcessingException {  
          jg.writeString("");  
      }  
    }); 
  }
}

3.配置如下

<bean id="jacksonMapper" class="com.tyky.eduplat.reslib.infrastructure.MyJsonMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg value="yyyy-MM-dd HH:mm:ss"/>
</bean>
</property>
</bean> 
<bean id="jacksonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider">
<constructor-arg ref="jacksonMapper" />
</bean> 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解java生成json字符串的方法

    詳解java生成json字符串的方法

    本篇文章主要介紹了java生成json字符串的方法,包括map對象轉(zhuǎn)換成json對象,list轉(zhuǎn)換成json,json轉(zhuǎn)換成list和map,有興趣的可以了解一下。
    2017-01-01
  • 關(guān)于在IDEA中SpringBoot項(xiàng)目中activiti工作流的使用詳解

    關(guān)于在IDEA中SpringBoot項(xiàng)目中activiti工作流的使用詳解

    這篇文章主要介紹了關(guān)于在IDEA中SpringBoot項(xiàng)目中activiti工作流的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java設(shè)計(jì)模式:原始模型模式

    java設(shè)計(jì)模式:原始模型模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之Prototype原型模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 基于Java編寫第一個(gè)區(qū)塊鏈項(xiàng)目

    基于Java編寫第一個(gè)區(qū)塊鏈項(xiàng)目

    區(qū)塊鏈?zhǔn)欠植际綌?shù)據(jù)存儲、點(diǎn)對點(diǎn)傳輸、共識機(jī)制、加密算法等計(jì)算機(jī)技術(shù)的新型應(yīng)用模式,下面這篇文章主要給大家介紹了基于Java實(shí)現(xiàn)區(qū)塊鏈的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 深入淺析Spring Security5中默認(rèn)密碼編碼器

    深入淺析Spring Security5中默認(rèn)密碼編碼器

    這篇文章主要介紹了Spring Security5中默認(rèn)密碼編碼器,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-05-05
  • 教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引

    教你通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引

    大家都知道B+Tree是從二叉樹演化而來,在這之前我們來先了解二叉樹、平衡二叉樹、平衡多叉樹,這篇文章主要介紹了通過B+Tree平衡多叉樹理解InnoDB引擎的聚集和非聚集索引,需要的朋友可以參考下
    2022-01-01
  • Java8時(shí)間日期庫中的常用使用示例

    Java8時(shí)間日期庫中的常用使用示例

    這篇文章主要介紹了Java8時(shí)間日期庫中的20個(gè)常用使用示例,幫助大家更好學(xué)習(xí)Java8是如何處理時(shí)間及日期的方法,感興趣的朋友可以參考一下
    2016-02-02
  • Java?根據(jù)XPATH批量替換XML節(jié)點(diǎn)中的值

    Java?根據(jù)XPATH批量替換XML節(jié)點(diǎn)中的值

    這篇文章主要介紹了Java根據(jù)XPATH批量替換XML節(jié)點(diǎn)中的值,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot整合gateway全過程

    SpringBoot整合gateway全過程

    這篇文章主要介紹了SpringBoot整合gateway全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java生成自增編號數(shù)字的問題

    java生成自增編號數(shù)字的問題

    這篇文章主要介紹了java生成自增編號數(shù)字的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

民丰县| 平凉市| 精河县| 资兴市| 红原县| 石渠县| 唐海县| 西林县| 丹寨县| 四子王旗| 武宣县| 德阳市| 景谷| 进贤县| 新野县| 裕民县| 宁夏| 小金县| 安康市| 通道| 合山市| 黄龙县| 博白县| 广丰县| 襄樊市| 忻城县| 南汇区| 藁城市| 剑阁县| 瓦房店市| 平原县| 阜新市| 治多县| 安乡县| 苍溪县| 安平县| 息烽县| 青冈县| 谢通门县| 民乐县| 永嘉县|