在使用 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中...