国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

jackjson自定義序列化和反序列化

這篇具有很好參考價值的文章主要介紹了jackjson自定義序列化和反序列化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

JRT引用的jackjson作為json處理庫。由于JRT.ORM要求表不用datetime類型,把日期和時間用Int存儲,所以O(shè)RM要支持日期時間的轉(zhuǎn)換。為什么要把日期時間不用datetime而用Int,比如日期:20240117,時間就是從0點到當(dāng)前的秒數(shù)。因為不用datetime兼容性好,不會因為不同庫datetime函數(shù)不同而要處理差異。用Int查詢效率高。

所以需要json序列化到實體時候能把日期和時間串序列化成整數(shù)。實體轉(zhuǎn)json時候要能把日期和時間的整數(shù)轉(zhuǎn)換成日期和時間串。

日期反序列化

package JRT.Core.JsonAttributes;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;

/**
 * 把JSON串轉(zhuǎn)換對象,在日期屬性上加上下面注解
 * @JsonSerialize(using = JRTDateSerializer.class)
 * @JsonDeserialize(using = JRTDateDeserializer.class)
 */
public class JRTDateDeserializer extends JsonDeserializer<Integer> {
    @Override
    public Integer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        JsonNode node = jsonParser.getCodec().readTree(jsonParser);
        String val = node.asText();
        return JRT.Core.Util.TimeParser.TransDate(val);
    }
}

日期序列化

package JRT.Core.JsonAttributes;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 把對象轉(zhuǎn)換成JSON串,在日期屬性上加上下面注解
 * @JsonSerialize(using = JRTDateSerializer.class)
 * @JsonDeserialize(using = JRTDateDeserializer.class)
 */
public class JRTDateSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer dateInt, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(JRT.Core.Util.TimeParser.DateIntToStr(dateInt));
    }
}

時間反序列化

package JRT.Core.JsonAttributes;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;
/**
 * 把JSON串轉(zhuǎn)換對象,在時間屬性上加上下面注解
 * @JsonSerialize(using = JRTDateSerializer.class)
 * @JsonDeserialize(using = JRTDateDeserializer.class)
 */
public class JRTTimeDeserializer extends JsonDeserializer<Integer> {
    @Override
    public Integer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        JsonNode node = jsonParser.getCodec().readTree(jsonParser);
        String val = node.asText();
        return JRT.Core.Util.TimeParser.TransTime(val);
    }
}

時間序列化

package JRT.Core.JsonAttributes;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;

/**
 * 把對象轉(zhuǎn)換成JSON串,在時間屬性上加上下面注解
 * @JsonSerialize(using = JRTDateSerializer.class)
 * @JsonDeserialize(using = JRTDateDeserializer.class)
 */
public class JRTTimeSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer timeStr, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(JRT.Core.Util.TimeParser.TimeIntToStr(timeStr));
    }
}

布爾反序列化

package JRT.Core.JsonAttributes;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;

import java.io.IOException;

/**
 * 把JSON串轉(zhuǎn)換對象,在布爾屬性上加上下面注解
 * @JsonDeserialize(using = JRTBoolDeserializer.class)
 */
public class JRTBoolDeserializer extends JsonDeserializer<Boolean> {
    @Override
    public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
        JsonNode node = jsonParser.getCodec().readTree(jsonParser);
        if(node.isBoolean())
        {
            Boolean val=node.asBoolean();
            return val;
        }
        else if(node.isInt())
        {
            int val=node.asInt();
            if(val==0)
            {
                return false;
            }
            else {
                return true;
            }
        }
        else
        {
            String val = node.asText();
            if(val.equals("0"))
            {
                return false;
            }
            else if(val.equals("1"))
            {
                return true;
            }
            else if(val.equals("false"))
            {
                return false;
            }
            else if(val.equals("true"))
            {
                return true;
            }
            return false;
        }

    }
}

使用方式就是給實體屬性加上注解
jackjson自定義序列化和反序列化,python,java,前端

由于ORM自己組json時候也需要知道哪些列是日期列,哪些是時間列,哪些是布爾列,所以自己實現(xiàn)了幾個注解,這里不用jackjson的注解來判斷日期時間就是為了可能變json庫做預(yù)留,自己可控注解更合適

日期注解

//特性,為通用碼表提供支持
package JRT.Core.CustomAttributes;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 標(biāo)識屬性是日期的特性
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface DateAttribute {
}

時間注解

//特性,為通用碼表提供支持
package JRT.Core.CustomAttributes;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 標(biāo)識屬性是時間的特性
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeAttribute {
}

布爾注解

//特性,為通用碼表提供支持
package JRT.Core.CustomAttributes;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 標(biāo)識屬性是布爾的特性
 */
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface BoolAttribute {
}

碼表按注解解析參數(shù)
jackjson自定義序列化和反序列化,python,java,前端

ORM組json按注解處理日期和時間
jackjson自定義序列化和反序列化,python,java,前端
對象轉(zhuǎn)json測試
jackjson自定義序列化和反序列化,python,java,前端

jackjson自定義序列化和反序列化,python,java,前端
打磨設(shè)計器
jackjson自定義序列化和反序列化,python,java,前端

模板表實體

package JRT.Model.Entity;
import JRT.Core.CustomAttributes.*;
import JRT.Core.JsonAttributes.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
/**
 *[功能描述:本代碼由LIS內(nèi)部代碼生成工具生成,請不要手動修改,如要修改,請寫修改變更記錄]
 *[創(chuàng)建者:JRT.Entity生成器]
 */
@UniqueAttribute(ColNames = "RowID")
@TableAttribute(Name="dbo.JRT_PrintTemplate")
public class JRTPrintTemplate
{
	/**
	 * 主鍵
	 */
	@NotNullAttribute
	@IdAttribute(Name = "RowID")
	@LengthAttribute(MaxLen = 10)
	public int RowID;

	/**
	 * 模板代碼
	 */
	@NotNullAttribute
	@LengthAttribute(MaxLen = 100)
	public String Code;

	/**
	 * 模板名稱
	 */
	@NotNullAttribute
	@LengthAttribute(MaxLen = 100)
	public String CName;

	/**
	 * 產(chǎn)品組唯一標(biāo)識
	 */
	@NotNullAttribute
	@LengthAttribute(MaxLen = 30)
	public String ProductGroup;

	/**
	 * 產(chǎn)品組存的業(yè)務(wù)ID
	 */
	@NotNullAttribute
	@LengthAttribute(MaxLen = 30)
	public String ProductBllID;

	/**
	 * 模板紙張
	 */
	@FrekeyAttribute(Name = "JRTPrintPaper", RefColumnName = "RowID", AssociaField = "CName")
	@LengthAttribute(MaxLen = 10)
	public Integer JRTPrintPaperDR;

	/**
	 * 邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double ResultLineSpacing;

	/**
	 * 結(jié)果行數(shù)
	 */
	@LengthAttribute(MaxLen = 10)
	public Integer ResultRows;

	/**
	 * 結(jié)果列
	 */
	@LengthAttribute(MaxLen = 10)
	public Integer ResultCols;

	/**
	 * 紙張方向
	 */
	@LengthAttribute(MaxLen = 10)
	public String PaperLayout;

	/**
	 * 下邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double PaperBottom;

	/**
	 * 左邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double PaperLeft;

	/**
	 * 右邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double PaperRight;

	/**
	 * 上邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double PaperTop;

	/**
	 * 微生物邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double MicResultLineSpacing;

	/**
	 * 微生物行數(shù)
	 */
	@LengthAttribute(MaxLen = 10)
	public Integer MicResultRows;

	/**
	 * 微生物列數(shù)
	 */
	@LengthAttribute(MaxLen = 10)
	public Integer MicResultCols;

	/**
	 * 邊距
	 */
	@LengthAttribute(MaxLen = 10)
	public Double ArchivesMargin;

	/**
	 * 雙列填充類型
	 */
	@LengthAttribute(MaxLen = 10)
	public String DoubleColFillType;

	/**
	 * 序號
	 */
	@LengthAttribute(MaxLen = 10)
	public Integer Sequence;

	/**
	 * 父模板
	 */
	@FrekeyAttribute(Name = "JRTPrintTemplate", RefColumnName = "RowID", AssociaField = "CName")
	@LengthAttribute(MaxLen = 10)
	public Integer ParentTemplateDR;

	/**
	 * 截止日期
	 */
	@JsonSerialize(using = JRTDateSerializer.class)
	@JsonDeserialize(using = JRTDateDeserializer.class)
	@DateAttribute
	@LengthAttribute(MaxLen = 10)
	public Integer EndDate;

	/**
	 * 截止時間
	 */
	@JsonSerialize(using = JRTTimeSerializer.class)
	@JsonDeserialize(using = JRTTimeDeserializer.class)
	@TimeAttribute
	@LengthAttribute(MaxLen = 10)
	public Integer EndTime;

	/**
	 * 截止說明
	 */
	@LengthAttribute(MaxLen = 50)
	public String EndRemark;

}

JRT的完善持續(xù)推進(jìn)中,抽取任何空余時間來打磨文章來源地址http://www.zghlxwxcb.cn/news/detail-801951.html

到了這里,關(guān)于jackjson自定義序列化和反序列化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java中序列化和反序列化解釋

    在Java中,序列化(Serialization)是指將對象的狀態(tài)轉(zhuǎn)換為字節(jié)流的過程,以便將其保存到文件、在網(wǎng)絡(luò)中傳輸或持久化到數(shù)據(jù)庫中。而反序列化(Deserialization)則是將字節(jié)流轉(zhuǎn)換回對象的過程,恢復(fù)對象的狀態(tài)。 序列化和反序列化主要用于以下場景: 1. 對象持久化:通過序列

    2024年02月07日
    瀏覽(23)
  • 【精選】PHP&java 序列化和反序列化漏洞

    目錄 首先 其次 技巧和方法

    2024年01月23日
    瀏覽(21)
  • 一文了解Java序列化和反序列化:對象的存儲與傳輸

    一文了解Java序列化和反序列化:對象的存儲與傳輸

    Java序列化是一項強(qiáng)大而重要的技術(shù),它允許我們將對象轉(zhuǎn)換為字節(jié)流,以便在存儲、傳輸和重建時使用。在本文中,我們將深入探討Java序列化的基本概念、使用方法以及一些應(yīng)用場景。 Java序列化是指將對象轉(zhuǎn)換為字節(jié)流的過程,以便可以將其存儲到文件、數(shù)據(jù)庫或在網(wǎng)絡(luò)上

    2024年02月13日
    瀏覽(23)
  • 又一個難題:Java 序列化和反序列化為什么要實現(xiàn) Serializable 接口?

    作者:椰子Tyshawn 來源:https://blog.csdn.net/litianxiang_kaola 最近公司的在做服務(wù)化, 需要把所有model包里的類都實現(xiàn)Serializable接口, 同時還要顯示指定serialVersionUID的值. 聽到這個需求, 我腦海里就突然出現(xiàn)了好幾個問題, 比如說: 序列化和反序列化是什么? 實現(xiàn)序列化和反序列化為什

    2024年02月08日
    瀏覽(19)
  • 【Linux】序列化和反序列化

    【Linux】序列化和反序列化

    在網(wǎng)絡(luò)編程中,直接使用 結(jié)構(gòu)體 進(jìn)行數(shù)據(jù)傳輸會出錯,因為 本質(zhì)上socket無法傳輸結(jié)構(gòu)體 ,我們只有將結(jié)構(gòu)體裝換為字節(jié)數(shù)組,或者是字符串格式來傳輸,然后對端主機(jī)收到了數(shù)據(jù),再將其轉(zhuǎn)化為結(jié)構(gòu)體,這就是序列化和反序列化的過程! 序列化 (Serialization)是將對象的狀態(tài)

    2024年02月10日
    瀏覽(19)
  • 什么是序列化和反序列化?

    JSON(JavaScript Object Notation)和XML(eXtensible Markup Language)是兩種常用的數(shù)據(jù)交換格式,用于在不同系統(tǒng)之間傳輸和存儲數(shù)據(jù)。 JSON是一種輕量級的數(shù)據(jù)交換格式,它使用易于理解的鍵值對的形式表示數(shù)據(jù)。JSON數(shù)據(jù)結(jié)構(gòu)簡單明了,易于讀寫和解析,是基于JavaScript的一種常用數(shù)據(jù)

    2024年02月09日
    瀏覽(29)
  • Unity-序列化和反序列化

    序列化是指把對象轉(zhuǎn)換為字節(jié)序列的過程,而反序列化是指把字節(jié)序列恢復(fù)為對象的過程。序列化最主要的用途就是傳遞對象和保存對象。 在Unity中保存和加載、prefab、scene、Inspector窗口、實例化預(yù)制體等都使用了序列化與反序列化。 1 自定義的具有Serializable特性的非抽象、

    2024年01月24日
    瀏覽(27)
  • [計算機(jī)網(wǎng)絡(luò)]---序列化和反序列化

    [計算機(jī)網(wǎng)絡(luò)]---序列化和反序列化

    前言 作者 :小蝸牛向前沖 名言 :我可以接受失敗,但我不能接受放棄 ?? 如果覺的博主的文章還不錯的話,還請 點贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正? 目錄 ?一、再談協(xié)議 二、序列化和反序化 1、網(wǎng)絡(luò)版本計算器的場景搭建 2、

    2024年02月20日
    瀏覽(21)
  • TCP定制協(xié)議,序列化和反序列化

    TCP定制協(xié)議,序列化和反序列化

    目錄 前言 1.理解協(xié)議 2.網(wǎng)絡(luò)版本計算器 2.1設(shè)計思路 2.2接口設(shè)計 2.3代碼實現(xiàn): 2.4編譯測試 總結(jié) ? ? ? ? 在之前的文章中,我們說TCP是面向字節(jié)流的,但是可能對于面向字節(jié)流這個概念,其實并不理解的,今天我們要介紹的是如何理解TCP是面向字節(jié)流的,通過編碼的方式,自

    2024年02月12日
    瀏覽(23)
  • 從淺入深理解序列化和反序列化

    從淺入深理解序列化和反序列化

    什么是java序列化 序列化:把對象轉(zhuǎn)換為字節(jié)序列的過程 反序列:把字節(jié)序列恢復(fù)為對象的過程 對象序列化機(jī)制(object serialization)是java語言內(nèi)建的一種對象持久化方式,通過對象序列化,可以將對象的狀態(tài)信息保存為字節(jié)數(shù)組,并且可以在有需要的時候?qū)⑦@個字節(jié)數(shù)組通過

    2024年02月06日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包