国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

由JSON序列化失敗引起的對(duì)序列化過(guò)程配置的思考

kyanag / 2552人閱讀

摘要:報(bào)錯(cuò)信息部分代碼片段對(duì)象實(shí)例導(dǎo)致序列化錯(cuò)誤當(dāng)然解決方式有很多種,在最初版本的代碼開(kāi)發(fā)過(guò)程中,由于部分業(yè)務(wù)的缺失,暫時(shí)把空位補(bǔ)上,而其表示的其實(shí)就是空對(duì)象,導(dǎo)致序列化時(shí)報(bào)錯(cuò)。解決方法第一種方法直接把替換為,即可解決序列化錯(cuò)誤問(wèn)題。

問(wèn)題描述

本次遇到問(wèn)題時(shí)所使用的框架是Spring Boot,處理完請(qǐng)求之后,返回?cái)?shù)據(jù)之前,在POJO轉(zhuǎn)化成JSON時(shí),有些屬性違背輸出規(guī)則或者有些屬性循環(huán)引用會(huì)造成無(wú)法輸出。

報(bào)錯(cuò)信息:org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class java.lang.Object and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS)

部分代碼片段:

    @Override
    public ReviewReportDto getReviewReport(String requestId) {
        ReviewReportDto resDto = new ReviewReportDto();
        ...
        ...
        //Object對(duì)象實(shí)例導(dǎo)致序列化錯(cuò)誤
        resDto.setOffLineDto(new Object());
        return resDto;
    }

當(dāng)然解決方式有很多種,在最初版本的代碼開(kāi)發(fā)過(guò)程中,由于部分業(yè)務(wù)的缺失,暫時(shí)把空位補(bǔ)上new Object(),而其表示的其實(shí)就是null(空對(duì)象),導(dǎo)致序列化時(shí)報(bào)錯(cuò)。

解決方法

第一種方法:
直接把new Object()替換為null,即可解決序列化錯(cuò)誤問(wèn)題。

第二種方法
通過(guò)設(shè)置,使Jackson遇到空對(duì)象不拋異常。

    @Bean("objectMapper")
    public ObjectMapper myMapper() {
        return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
    }

第三種方法(spring mvc項(xiàng)目)
通過(guò)xml配置自定義類來(lái)覆蓋默認(rèn)配置

    //自定義類
    public class MyMapper extends ObjectMapper {
        public MyMapper() {
            configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false);
        }
    }
    
    
        
            ...
            
                ...
                
                
                    
                    
                
            
        
    
序列化過(guò)程配置的規(guī)整

此處貼出SerializationFeature的源碼,以及對(duì)部分常用配置方式的總結(jié):

package com.fasterxml.jackson.databind;

import com.fasterxml.jackson.databind.cfg.ConfigFeature;

public enum SerializationFeature implements ConfigFeature {

    //是否環(huán)繞根元素,默認(rèn)false,如果為true,則默認(rèn)以類名作為根元素。根元素名稱也可以通過(guò)@JsonRootName來(lái)自定義。
    WRAP_ROOT_VALUE(false),

    //是否縮放排列輸出,默認(rèn)false,有些場(chǎng)合為了便于排版閱讀則需要對(duì)輸出做縮放排列
    INDENT_OUTPUT(false),

    //遇到空對(duì)象則失敗
    FAIL_ON_EMPTY_BEANS(true),

    //自我引用則失敗
    FAIL_ON_SELF_REFERENCES(true),

    //com.fasterxml.jackson.annotation.JsonUnwrapped包下相關(guān)聯(lián)的類將會(huì)拋出異常
    WRAP_EXCEPTIONS(true),


    FAIL_ON_UNWRAPPED_TYPE_IDENTIFIERS(true),
    CLOSE_CLOSEABLE(false),
    FLUSH_AFTER_WRITE_VALUE(true),
    WRITE_DATES_AS_TIMESTAMPS(true),

    //序列化日期時(shí)以timestamps輸出,默認(rèn)true
    WRITE_DATE_KEYS_AS_TIMESTAMPS(false),

    WRITE_DATES_WITH_ZONE_ID(false),
    WRITE_DURATIONS_AS_TIMESTAMPS(true),

    //序列化char[]時(shí)以json數(shù)組輸出,默認(rèn)false
    WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS(false),

    //序列化枚舉是以toString()來(lái)輸出,默認(rèn)false,即默認(rèn)以name()來(lái)輸出
    WRITE_ENUMS_USING_TO_STRING(false),

    //序列化枚舉是以ordinal()來(lái)輸出,默認(rèn)false
    WRITE_ENUMS_USING_INDEX(false),

    WRITE_NULL_MAP_VALUES(true),
    /** @deprecated */
    @Deprecated
    WRITE_EMPTY_JSON_ARRAYS(true),

    //序列化單元素?cái)?shù)組時(shí)不以數(shù)組來(lái)輸出,默認(rèn)false
    WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED(false),

    /** @deprecated */
    @Deprecated
    //序列化BigDecimal時(shí)之間輸出原始數(shù)字還是科學(xué)計(jì)數(shù),默認(rèn)false,即是否以toPlainString()科學(xué)計(jì)數(shù)方式來(lái)輸出
    WRITE_BIGDECIMAL_AS_PLAIN(false),
    WRITE_DATE_TIMESTAMPS_AS_NANOSECONDS(true),

    //序列化Map時(shí)對(duì)key進(jìn)行排序操作,默認(rèn)false
    ORDER_MAP_ENTRIES_BY_KEYS(false),

    EAGER_SERIALIZER_FETCH(true),
    USE_EQUALITY_FOR_OBJECT_ID(false);

    private final boolean _defaultState;
    private final int _mask;

    private SerializationFeature(boolean defaultState) {
        this._defaultState = defaultState;
        this._mask = 1 << this.ordinal();
    }

    public boolean enabledByDefault() {
        return this._defaultState;
    }

    public int getMask() {
        return this._mask;
    }

    public boolean enabledIn(int flags) {
        return (flags & this._mask) != 0;
    }
}

By the way:引用請(qǐng)標(biāo)明出處。如有錯(cuò)誤,請(qǐng)批評(píng)指正。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/67862.html

相關(guān)文章

  • Hadoop學(xué)習(xí)熱身——HDFS概念

    摘要:助輔助做元數(shù)據(jù)的備份。元數(shù)據(jù)存儲(chǔ)在內(nèi)存和磁盤(pán)中,這是因?yàn)榇疟P(pán)的讀寫(xiě)效率較低,而保存到內(nèi)存又有斷電消失的隱患。但磁盤(pán)中的元數(shù)據(jù)并不是最新的,內(nèi)存中的元數(shù)據(jù)才是實(shí)時(shí)的。將中的和復(fù)制到自身節(jié)點(diǎn)上并加載進(jìn)內(nèi)存,根據(jù)的記錄操作更改元數(shù)據(jù)信息。 HDFS(Hadoop Distributed File System ) 前言:最近正式進(jìn)入了大數(shù)據(jù)框架的學(xué)習(xí)階段,文章來(lái)自個(gè)人OneNote筆記全部...

    AnthonyHan 評(píng)論0 收藏0
  • springboot學(xué)習(xí)(三)——使用HttpMessageConverter進(jìn)行http列化和反

    摘要:序列化反序列化主要體現(xiàn)在程序這個(gè)過(guò)程中,包括網(wǎng)絡(luò)和磁盤(pán)。如果是開(kāi)發(fā)應(yīng)用,一般這兩個(gè)注解對(duì)應(yīng)的就是序列化和反序列化的操作。協(xié)議的處理過(guò)程,字節(jié)流內(nèi)部對(duì)象,就涉及這兩種序列化。進(jìn)行第二步操作,也就是序列化和反序列化的核心是。 以下內(nèi)容,如有問(wèn)題,煩請(qǐng)指出,謝謝! 對(duì)象的序列化/反序列化大家應(yīng)該都比較熟悉:序列化就是將object轉(zhuǎn)化為可以傳輸?shù)亩M(jìn)制,反序列化就是將二進(jìn)制轉(zhuǎn)化為程序內(nèi)部的...

    stackfing 評(píng)論0 收藏0
  • Elasticsearch學(xué)習(xí)上手(二)

    摘要:序列化被大多數(shù)編程語(yǔ)言所支持,并且已經(jīng)成為領(lǐng)域的標(biāo)準(zhǔn)格式。通過(guò)索引對(duì)文檔的進(jìn)行創(chuàng)建查詢修改和刪除等操作。請(qǐng)求的結(jié)構(gòu)調(diào)整為不再使用請(qǐng)求使用這個(gè)存儲(chǔ)這個(gè)文檔,而是使用請(qǐng)求存儲(chǔ)文檔在這個(gè)命名空間下。 在安裝elasticsearch之后,我們就要開(kāi)始進(jìn)行操作實(shí)踐,那么在實(shí)踐之前,我們首先了解下elasticsearch的幾個(gè)概念 面向文檔 相對(duì)關(guān)系型數(shù)據(jù)庫(kù),是采用行和列的形式進(jìn)行存儲(chǔ)數(shù)據(jù),e...

    stdying 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<