資料流系列 2 前後端資料傳輸技巧2

2021-09-14 00:11:51 字數 3182 閱讀 4167

各位小夥伴,晚上好!這裡分享下後端定義前端需傳入的引數:*command的技巧之1:使用map<>傳參和返回給前端的dto技巧之1:自定義反序列化。

目錄一、command定義技巧(前端需傳入的引數封裝)

二、自定義反序列化

三、總結

一、command定義技巧(前端需傳入的引數封裝)

在大專家,後端把前端需要傳入的引數多封裝成command,返回給前端的封裝成dto。

command多用動詞表示。

比如:使用者更新個人資訊的時候,方法如下:

public

void

updateuserinfo

(updateuserinfocommand cmd)

command命名要規範:明確是什麼command,這裡是:updateuserinfocommand,可能還有其他command,不要籠統的命名為:

usercommand.

和前端互動有傳參有2種方式:

方式1:

乙個command,利用map

場景:使用者修改個人資訊,包含各種各樣的資訊,各種資料格式:

"gender"

:"male"

,——列舉

"religiousfaith"

:"nothing"

,"buddhism" ——字串

"knownallergyresource":[

"雞蛋"

]——陣列或容器

這麼多的屬性,一一封裝嘛?那屬性指定下來估計上百個。

用map<>

來看一下updateuserinfocommand

public

class

updateuserinfocommand

extends

hashmap

implements

serializable

public

void

setuserid

(string userid)

public string getoperatorid()

public

void

setoperatorid

(string operatorid)

public updateoptions getoptions()

public

void

setoptions

(updateoptions options)

}

用map傳參:

優點:靈活,適合各種引數;乙個介面可以搞定

缺點:前端不知道怎麼傳,傳什麼不明確,需要口頭約定

方式2:

指定具體的引數,就是乙個類,各種資料型別的指定即可。

方式1還存在乙個問題,那就是查詢返回給前端,資料怎麼互動?

先來看一下返回給前端的dto:

@jsonserialize

(using = userdatajsonserializer.

class

)public

class

userdatadto

implements

serializable

public

void

setuserid

(string userid)

public map

getfields()

public

void

setfields

(map

fields)

public string getfieldasstring

(string fieldname)

}return null;

}}

會有什麼問題?這個fields會明晃晃的作為乙個key傳給前端,語義一點也不明確。如下:

},

"headimg"

: null

}}

我們要達到的效果如下:

,"headimg"

: null

}}

看看這個fields,使我們想要傳給前端的嘛?當然不是。我們只想給前端乙個key為liveaddress,value為乙個物件,該物件包含了:

liveprovincecode等資訊。怎麼辦?

反序列化的時候處理,不用預設的反序列化,用工具jackon。

二、自定義反序列化

import com.fasterxml.jackson.databind.annotation.jsonserialize;

@jsonserialize

(using = userdatajsonserializer.

class

)public

class

userdatadto

implements

serializable

該註解就重寫了反序列化的過程,會把fields重新處理。

public

class

userdatajsonserializer

extends

jsonserializer

}gen.

writeendobject()

;}}

使用jackson步驟總結如下:

1、定義乙個類,繼承jsonserializer

2、重寫serialize()方法

3、在返回給前端的dto上增加註解:@jsonserialize(using = userdatajsonserializer.class)

為什麼就避免了fields傳給前端呢?因為用預設的serializable,所有屬性都會直接返回,自己重寫serialize方法,就可以按照想要的來反序列化拉。

總結:1、command命名語義明確:eg:updateuserinfocommand

2、command裡引數盡量少用map.優點:簡化傳參、簡化介面數量;缺點:傳遞給前端的引數語義非常模糊(需約定好)、反序列化需要干預,否則出現冗餘字段類似fields

3、jackson的運用

Spring MVC前後端的資料傳輸

本篇文章主要介紹了spring mvc中如何在前後端傳輸資料。在spring mvc中這主要通過model將資料從後端傳送到前端,一般的寫法為 public string index model model 首先需要定義乙個model,然後為model新增屬性,並繫結資料,最後將model新增到檢視...

Spring MVC前後端的資料傳輸的實現方法

後端 前程式設計客棧端 在spring mvc中這主要通過model將資料從後端傳送到前端,一般的寫法為 requestmapping value index method requestmethod.post public string index model model 首先需要定義乙個mode...

SpringMVC 前後臺資料傳輸

在學習使用springmvc過程中,對資料在框架中的流轉掌握不佳,特寫個筆記,對常用簡單方法進行總結 其實方式有很多,比如傳遞json字串 ajax傳值等 主要意圖在於快速上手使用。前端顯示後台資料 後台資料傳遞至前端頁面的主要方法,借助controller返回值。前端資料傳遞至後台 資料繫結 從請...