@JsonDeserialize和@JsonSerialize注解的使用方式
JsonDeserialize注解介紹
@JsonDeserialize
:
- json反序列化注解,作用于setter()方法,將json數(shù)據(jù)反序列化為java對(duì)象。
- 可以理解為用在處理接收的數(shù)據(jù)上。
使用場(chǎng)景
- 前端傳遞的參數(shù)與后端實(shí)際接收的參數(shù)不一致時(shí),可以通過(guò)反序列化注解處理。
- (比如將前端傳遞的主鍵集合轉(zhuǎn)換成用逗號(hào)分隔的字符串)
使用示例
假如前端頁(yè)面中選擇多條數(shù)據(jù),會(huì)向后端傳遞選中的數(shù)據(jù)對(duì)象集合,但是后端期望存儲(chǔ)選中的多個(gè)數(shù)據(jù)id用逗號(hào)分隔,此時(shí)可以用反序列注解。
1、自定義反序列化的方式
public class CheckedStringDeserializer extends JsonDeserializer<String> { @Override public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { final List<Map<String, String>> list = p.getCodec().readValue(p, new TypeReference<List<Map<String, String>>>() { }); if (CollUtil.isNotEmpty(list)) { final ArrayList<String> objects = new ArrayList<>(list.size()); list.forEach(e -> objects.add(e.get("id"))); return CollUtil.join(objects, ","); } return ""; } }
2、后端接收參數(shù)的dto如下圖所示,其中臨時(shí)黨支部人員Id接收的是String類型,增加了該反序列化注解。
3、前端傳遞參數(shù)如下圖所示:
4、后端實(shí)際接收到的參數(shù)如圖所示:
@JsonSerialize注解
@JsonSerialize
:
- json序列化注解,作用于getter()方法,將java對(duì)象序列化為json數(shù)據(jù)。
- 可以理解為用在處理返回的數(shù)據(jù)上
使用場(chǎng)景
后端返回前端的參數(shù)與前端期望的參數(shù)不一致時(shí),可以用個(gè)序列化注解處理。(比如數(shù)據(jù)脫敏、數(shù)據(jù)格式處理等)
使用示例
假如后端存儲(chǔ)附件、圖片或者其他文件時(shí),只存了文件key,此時(shí)前端反顯需要將數(shù)據(jù)放在list中回顯。
1、自定義序列化處理方式
public class FileUploadSeserializer extends JsonSerializer<String> { @Override public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException { //將string轉(zhuǎn)為L(zhǎng)ist<Map<String,String>>格式 Map<String,String> map = new HashMap<>(2); List<Map<String,String>> list = new ArrayList<>(1); map.put("key", value); map.put("name",value); list.add(map); gen.writeObject(list); } }
2、返回前端的vo對(duì)象如下圖所示,其中其中模板背景期望為附件的Key和name對(duì)象集合,在該字段上增加了文件上傳序列化注解。
3、此時(shí)返回前端的數(shù)據(jù)格式為
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java中數(shù)組轉(zhuǎn)換為列表的兩種實(shí)現(xiàn)方式(超簡(jiǎn)單)
本文介紹了在Java中將數(shù)組轉(zhuǎn)換為列表的兩種常見(jiàn)方法使用Arrays.asList和Java8的Stream API,Arrays.asList方法簡(jiǎn)單易用,但返回的列表是固定大小的;而使用Stream API可以實(shí)現(xiàn)更靈活的操作,如過(guò)濾和映射,根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧2025-03-03解決java.lang.Error: Unresolved compilation pro
這篇文章主要介紹了解決java.lang.Error: Unresolved compilation problems:問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03淺談web項(xiàng)目讀取classpath路徑下面的文件
這篇文章主要介紹了淺談web項(xiàng)目讀取classpath路徑下面的文件,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01IDEA中將SpringBoot項(xiàng)目提交到git倉(cāng)庫(kù)的方法步驟
本文主要介紹了IDEA中將SpringBoot項(xiàng)目提交到git倉(cāng)庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12WebClient拋UnsupportedMediaTypeException異常解決
這篇文章主要為大家介紹了WebClient拋UnsupportedMediaTypeException異常的解決方案,文中給大家介紹了六中方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02詳細(xì)介紹Java關(guān)鍵字throw?throws?Throwable的用法與區(qū)別
這篇文章主要介紹了java中throws與throw及Throwable的用法和區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04SpringBoot中HTTP請(qǐng)求不通的原因級(jí)解決方法
HTTP 請(qǐng)求是指從客戶端到服務(wù)器的請(qǐng)求消息,對(duì)于一個(gè) Spring Boot 項(xiàng)目而言,服務(wù)器就是 Spring Boot,客戶端就是用戶本地的瀏覽器,但是會(huì)遇到SpringBoot HTTP請(qǐng)求不通的問(wèn)題,本文介紹了一些常見(jiàn)問(wèn)題及解決方法,需要的朋友可以參考下2025-02-02