欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

Jackson 處理 null 或者 空字符串

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

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

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

objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

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

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

@JsonInclude(JsonInclude.Include.NON_NULL)

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

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

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()的覆寫(xiě),它決定了如果 反序列化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 "-";
    }
}

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

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

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

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

如果是字段屬性級(jí)別的

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

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

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

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

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

jackson + spring 支持rest接口,輸出的JSON 對(duì)于null的字符串是invoiceTitle: null,但是接受方希望返回的是invoiceTitle: ""。解決方法重寫(xiě)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)文章

  • Maven項(xiàng)目分析剔除無(wú)用jar引用的方法步驟

    Maven項(xiàng)目分析剔除無(wú)用jar引用的方法步驟

    這篇文章主要介紹了Maven項(xiàng)目分析剔除無(wú)用jar引用的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架

    詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架

    這篇文章主要介紹了詳解MyEclipse中搭建spring-boot+mybatis+freemarker框架,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 使用WebUploader實(shí)現(xiàn)分片斷點(diǎn)上傳文件功能(二)

    使用WebUploader實(shí)現(xiàn)分片斷點(diǎn)上傳文件功能(二)

    這篇文章主要為大家詳細(xì)介紹了使用WebUploader實(shí)現(xiàn)分片斷點(diǎn)上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼

    mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼

    這篇文章主要介紹了mybatis-plus主鍵id生成、字段自動(dòng)填充的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Java設(shè)計(jì)模式之單一職責(zé)原則精解

    Java設(shè)計(jì)模式之單一職責(zé)原則精解

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。本篇介紹設(shè)計(jì)模式七大原則之一的單一職責(zé)原則
    2022-02-02
  • Java實(shí)戰(zhàn)之課程在線學(xué)習(xí)系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之課程在線學(xué)習(xí)系統(tǒng)的實(shí)現(xiàn)

    本文將采用SpringBoot+Spring+Mybatis+Thyeleaf實(shí)現(xiàn)一個(gè)課程在線學(xué)習(xí)系統(tǒng),采用SpringBoot框架實(shí)現(xiàn)?前臺(tái)模板用的thymeleaf數(shù)據(jù)庫(kù)層采用mybatis框架注解模式,感興趣的可以了解一下
    2022-04-04
  • 擲6面骰子6000次每個(gè)點(diǎn)數(shù)出現(xiàn)的概率

    擲6面骰子6000次每個(gè)點(diǎn)數(shù)出現(xiàn)的概率

    今天小編就為大家分享一篇關(guān)于擲6面骰子6000次每個(gè)點(diǎn)數(shù)出現(xiàn)的概率,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • 詳細(xì)解讀Druid數(shù)據(jù)庫(kù)連接池的使用

    詳細(xì)解讀Druid數(shù)據(jù)庫(kù)連接池的使用

    這篇文章主要介紹了Druid數(shù)據(jù)庫(kù)連接池的使用,數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè),需要的朋友可以參考下
    2023-03-03
  • Java微信公眾平臺(tái)之自定義菜單

    Java微信公眾平臺(tái)之自定義菜單

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)之自定義菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Java Socket聊天室編程(一)之利用socket實(shí)現(xiàn)聊天之消息推送

    Java Socket聊天室編程(一)之利用socket實(shí)現(xiàn)聊天之消息推送

    這篇文章主要介紹了Java Socket聊天室編程(一)之利用socket實(shí)現(xiàn)聊天之消息推送的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09

最新評(píng)論