SpringBoot如何接收前端傳來的json數(shù)據(jù)
SpringBoot接收前端傳來的json數(shù)據(jù)
當(dāng)前端傳來json數(shù)據(jù)時,后端有兩種方式可以接收:使用POJO和Map進(jìn)行接收。
前端json數(shù)據(jù):
{
?? ?id:121, ? ? ?//數(shù)字
?? ?name:"lhj", ? ? //字符串
?? ?scoreList:[ ? ? //對象
?? ??? ??? ??? ?{Java:95}, ?
?? ??? ??? ??? ?{Python:98},
?? ??? ??? ??? ?{C++:94}
?? ??? ??? ??? ?]
?? ??? ?}使用POJO
若前端傳遞過來的數(shù)據(jù)剛好和我們的bean實(shí)體對象屬性一致,則可以使用對象的形式接收。
后端實(shí)體類
@Component
public class Score {
? ? private int id;
? ? private String name;
? ? private List<ScoreList> scoreList;
}后端Controller
@PostMapping("/student/score")
public void getScore(@RequestBody Score score){
?? ?System.out.println(score);
? ? }- 前端數(shù)據(jù)和bean對象屬性要一致
- 必須使用@RequestBody注解
使用Map接收
若前端傳遞過來的數(shù)據(jù)很復(fù)雜,沒有對應(yīng)的POJO與其對應(yīng),就可以用Map進(jìn)行接收。
后臺Controller
@PostMapping("/lhj/getdata")
public void getData(@RequestBody Map<String,Object>map){
?? ?System.out.println(map);
? ? }對于Map<String,Object>,值的類型建議設(shè)置為Object,這樣可以使Map能接收各種類型的數(shù)據(jù),如字符串、數(shù)字、數(shù)組和對象等。
使用POJO和Map接收的比較
1、map的優(yōu)點(diǎn):
- 靈活性更強(qiáng),易擴(kuò)展,耦合度低;
- 代碼簡潔;
- MyBatis查詢的返回結(jié)果本身就是Map,效率可能會比返回JavaBean高。
2、map的缺點(diǎn)
- JavaBean的數(shù)據(jù)在編譯期就會對其進(jìn)行校驗(yàn),如果出錯會直接提示。而Map的數(shù)據(jù)則需要到sql層才會進(jìn)行處理檢驗(yàn)。因此如果map的參數(shù)名稱寫錯、參數(shù)值如果多傳亂傳只能到sql層才會被發(fā)現(xiàn)。
- Map中所擁有的參數(shù)個數(shù)、類型、每個參數(shù)代表的含義對外不透明,團(tuán)隊開發(fā)及后期維護(hù)難度大
3、JavaBean的優(yōu)點(diǎn):
- 面向?qū)ο蟮牧己迷忈專?/li>
- 數(shù)據(jù)結(jié)構(gòu)清晰,便于團(tuán)隊開發(fā)和后期維護(hù);
- 代碼足夠健壯,可以排除掉編譯期錯誤;
4、javabean的缺點(diǎn):
- 代碼量增多,大量時間去封裝用到的表對象。
- 可能會影響開發(fā)效率。
PO和VO相結(jié)合
- 創(chuàng)建PO與數(shù)據(jù)庫字段對應(yīng),用于對數(shù)據(jù)庫的操作;
- 創(chuàng)建VO用于封裝和前端打交道的數(shù)據(jù),使用VO可以避免使用Map
SpringBoot接收json入?yún)?/h2>
最近做一個項目,給前端vue工程提供數(shù)據(jù)接口,部門經(jīng)理希望通過json格式來傳遞參數(shù)。
接口項目是用的springboot,所以直接使用controller里配置的path就能訪問到對應(yīng)的方法
示例如下:
vue調(diào)用的方法如下,可見我們傳了2個參數(shù),一個configid,一個configname
//通過json傳參
var url=“http://localhost/jsonparam”;
var sendData={“configid”:55,
“configname”:“000”
};
this.$http.jsonp(url,{params : sendData}).then(function (res) {
this.msg=res.data.configName;
});服務(wù)接口端代碼:
controller方法中,入?yún)⑶凹覢RequestParam 注解 ,value和前端傳的json字段對應(yīng)上
@RequestMapping(value="/jsonparam", method = RequestMethod.GET,produces="application/json;charset=UTF-8")
public ? ConfigVo getjsonpparam(@RequestParam(value="configid",required=true) ?Long id,@RequestParam(value="configname",required=true) String name) {
? ? ConfigVo vo = service.getConfigById(id); ??
? ? return vo;
}這樣使用,就能接收前臺傳來的json參數(shù)。
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot中實(shí)現(xiàn)通過后臺創(chuàng)建臨時表
這篇文章主要介紹了springboot中實(shí)現(xiàn)通過后臺創(chuàng)建臨時表操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實(shí)現(xiàn)示例
在處理大量數(shù)據(jù)時,直接從數(shù)據(jù)庫一次性讀取所有數(shù)據(jù)可能會導(dǎo)致內(nèi)存溢出或者性能下降,本文就來介紹一下java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-01-01
Java通過百度地圖API獲取定位(普通IP定位)的方法教程
這篇文章主要介紹了Java通過百度地圖API獲取定位的方法教程,首先說明了實(shí)現(xiàn)這個功能的需求和初衷,然后詳細(xì)描述了利用百度地圖API實(shí)現(xiàn)這個功能的步驟,包括在百度地圖開放平臺的準(zhǔn)備工作、學(xué)習(xí)官網(wǎng)API文檔、修改API的AK配置、Java代碼獲取定位等,需要的朋友可以參考下2024-11-11
Spring中ApplicationEventPublisher發(fā)布訂閱模式的實(shí)現(xiàn)
本文主要介紹了Spring中ApplicationEventPublisher發(fā)布訂閱模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
spring boot切面execution表達(dá)式添加多個包路徑問題及解決方案
在Spring Boot中,如果你想為多個包中的方法創(chuàng)建一個切面,你可以在@Pointcut注解中使用||操作符來指定多個包,下面給大家分享spring boot切面execution表達(dá)式添加多個包路徑問題及解決方案,感興趣的朋友跟隨小編一起看看吧2024-03-03

