SpringBoot列舉序列化方案

2021-10-08 19:43:34 字數 2019 閱讀 1370

在使用 json 傳值的時候,對於列舉型別的處理是比較麻煩的,因為基本上預設都只會按照列舉的名稱來序列化和反序列化。先來描述一下需求。

有乙個性別列舉:

male(1

,"男"),

female(2

,"女"

);

返回時以物件的形式序列化列舉,格式大致為:

}

入參時以列舉碼的形式反序列化列舉,格式為:

列舉

@jsonformat

(shape = jsonformat.shape.object)

@getter

@allargsconstructor

public

enum genderenum

}return null;

}}

使用@jsonformat(shape = jsonformat.shape.object)註解來讓列舉按照類(物件)的格式進行序列化。

使用@jsoncreator註解標記乙個通過列舉碼來查詢列舉的方法,jackson 會使用這個有參構造器進行反序列化。

返回dto

@apimodel

("使用者基本返回物件"

)@data

@accessors

(chain =

true

)public

class

useroutdto

入參dto及引數校驗
@apimodel

("使用者基本入參物件"

)@data

@accessors

(chain =

true

)public

class

userindto

使用jsonproperty來指定反序列化時接收的屬性名

使用apimodelproperty來指定文件中的屬性名和型別

警告這樣做雖然解決了列舉序列化和反序列化的問題。但是同時又引入了另乙個問題:

測試
@api

(tags =

"使用者管理介面"

問題的根源還是引數校驗,大致經歷了如下幾個階段:

想找乙份可復用的校驗規則。

沒找到:自定義一些校驗規則。

不想自定義:在序列化上想辦法。

關於自定義校驗規則的念頭源於@notempty@notblank這兩個非常非常常用的註解:

這也就導致了維護乙個大入參dto,可以通過分組 + @notnull 來實現的 not_null 策略更新實際上麻煩的一批。待測的解決方案為:

自定義 json 反序列化規則自動 trim,使用@size校驗字串。

使用pattern校驗字串。

ps如果有比較好用的 validation 擴充套件,還請提示一下哈

JSON序列化與反序列化列舉

一 json序列化與反序列化列舉 1.這個示例使用了乙個jsonconverter定製如何序列化json與反序列化列舉 using system using system.collections.generic using system.linq using system.text using go...

springboot整合redis序列化配置

1.當我們的springboot整合了redis,然後通過springboot程式往redis設定資訊,做快取使用,如果沒有使用序列化的時候,也是可以set進去的,不過是這樣子的 庫里的值 value資訊 看到的都是這樣子的,為什麼是這樣子呢?大白話說,就是你放在程式裡的話,翻譯完,咱們看不懂了,作...

SpringBoot 使用Redis 序列化問題

springboot預設使用的是jdkserializationredisserializer序列化方式 string型別的可以但是遇到物件,就會在key和value的前面出現字首 這時候就需要修改他的序列化方式 ctrl n 搜尋redisautoconfiguration springboot中...