JavaEE企業(yè)級(jí)項(xiàng)目開發(fā)(第3版)課件 單元9 JSON交互與RESTful支持_第1頁
JavaEE企業(yè)級(jí)項(xiàng)目開發(fā)(第3版)課件 單元9 JSON交互與RESTful支持_第2頁
JavaEE企業(yè)級(jí)項(xiàng)目開發(fā)(第3版)課件 單元9 JSON交互與RESTful支持_第3頁
JavaEE企業(yè)級(jí)項(xiàng)目開發(fā)(第3版)課件 單元9 JSON交互與RESTful支持_第4頁
JavaEE企業(yè)級(jí)項(xiàng)目開發(fā)(第3版)課件 單元9 JSON交互與RESTful支持_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

延遲符JSON數(shù)據(jù)格式與處理JSON交互與RESTful支持JSON數(shù)據(jù)格式—什么是JSONJSON是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript(歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語言的文本格式來存儲(chǔ)和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。JSON數(shù)據(jù)格式—JSON優(yōu)點(diǎn)簡單易用:JSON的語法簡單,易于理解和編寫,可以快速地進(jìn)行數(shù)據(jù)交換;跨平臺(tái)支持:JSON可以被多種編程語言解析和生成,可以在不同的平臺(tái)和語言之間進(jìn)行數(shù)據(jù)交換和傳輸;數(shù)據(jù)交換格式:JSON是一種標(biāo)準(zhǔn)的數(shù)據(jù)交換格式,可以在Web應(yīng)用程序中廣泛使用,如前后端數(shù)據(jù)交互、API接口數(shù)據(jù)傳輸?shù)?;輕量級(jí):JSON的數(shù)據(jù)格式輕量級(jí),傳輸數(shù)據(jù)時(shí)占用帶寬較小,可以提高數(shù)據(jù)傳輸速度;易于擴(kuò)展:JSON的數(shù)據(jù)結(jié)構(gòu)靈活,支持嵌套對(duì)象和數(shù)組等復(fù)雜的數(shù)據(jù)結(jié)構(gòu),便于擴(kuò)展和使用;安全性:JSON數(shù)據(jù)格式是一種純文本格式,不包含可執(zhí)行代碼,不會(huì)執(zhí)行惡意代碼,因此具有較高的安全性。JSON概述—JSON形式對(duì)象(object)

是一個(gè)無序的“‘名稱/值’對(duì)”集合。一個(gè)對(duì)象以“{”(左括號(hào))開始,“}”(右括號(hào))結(jié)束。每個(gè)“名稱”后跟一個(gè)“:”(冒號(hào));“‘名稱/值’對(duì)”之間使用“,”(逗號(hào))分隔。數(shù)組(array)

是值(value)的有序集合。一個(gè)數(shù)組以“[”(左中括號(hào))開始,“]”(右中括號(hào))結(jié)束。值之間使用“,”(逗號(hào))分隔。JSON數(shù)據(jù)格式延遲符1.JSON數(shù)值格式:{“key”:value}示例:{"key1":100,"key2":200}01JSON數(shù)據(jù)格式延遲符2.JSON字符串

格式:{“key”:“value”}

示例:

{"name":"張三","password":"123"}02JSON數(shù)據(jù)格式延遲符3.JSON數(shù)組

格式:{“key”:[value]}

示例:

{ "key1":[0,1,3], "key2":[4,5,6]

}03JSON數(shù)據(jù)格式延遲符4.JSON對(duì)象

格式:{“key”:{value}}

示例:

{

"key1":{

"1":"足球"},

"key2":{"2":"籃球"}

}04JSON數(shù)據(jù)格式延遲符5.JSON對(duì)象數(shù)組

格式:{“key”:[{“key1”:“value1”},{“key2”:“value2”}]}

示例:

{

"興趣愛好":[{"key1":"音樂"},{"key2":"旅游"}]

}05JSON數(shù)據(jù)格式延遲符6.JSON數(shù)組對(duì)象

格式:{“key”:{“key1”:[value1,value2]}}

示例:

{

"學(xué)生":{"數(shù)學(xué)成績":[88,85,90]}

}06JSON數(shù)據(jù)處理延遲符謝謝觀看主講人:蔣衛(wèi)祥延遲符SpringMVC框架有關(guān)JSON的注解JSON交互與RESTful支持@RequestBody注解@RequestBody注解:用于讀取HTTP請求的內(nèi)容(字符串),通過SpringMVC提供的HttpMessageConverter接口將讀到的內(nèi)容(JSON數(shù)據(jù))轉(zhuǎn)換為JSON對(duì)象并綁定到Controller方法的參數(shù)上。@RequestBody注解延遲符1.創(chuàng)建圖書信息類:Book.java@DatapublicclassBook{privateIntegerid;privateStringbookName;//圖書名privateStringauthor;//圖書作者privateStringpress;//圖書出版社privateDoubleprice;//圖書價(jià)格}@RequestBody注解使用實(shí)例@RequestBody注解延遲符2.創(chuàng)建圖書控制器類:BookJsonController.java@Controller@RequestMapping("/book")publicclassBookJsonController{@RequestMapping(value="/getBookInfo",produces="application/json;charset=utf-8")@ResponseBodypublicStringgetBookInfo(@RequestBodyBookbook){returnbook.toString();}}@RequestBody注解使用實(shí)例@RequestBody注解延遲符@RequestBody注解使用實(shí)例@ResponseBody注解@ResponseBody注解用于將Controller的方法返回的對(duì)象,通過SpringMVC提供的HttpMessageConverter接口轉(zhuǎn)換為指定格式的數(shù)據(jù)如:JSON、XML等,通過Response響應(yīng)給客戶端。@RequestBody注解延遲符@RequestMapping(value="/getBookInfo2",produces="application/json;charset=utf-8")@ResponseBodypublicBookgetBookInfo2(@RequestBodyBookbook){returnbook;}@ResponseBody注解使用實(shí)例延遲符@ResponseBody注解使用實(shí)例@ResponseBody注解JSON交互綜合案例延遲符學(xué)習(xí)案例案例代碼查詢商品詳細(xì)信息,請求數(shù)據(jù)格式:JSON,響應(yīng)數(shù)據(jù)格式:JSON謝謝觀看主講人:蔣衛(wèi)祥延遲符任務(wù)9.1新增入校報(bào)備信息JSON交互與RESTful支持實(shí)體類Mapper接口Mapper映射文件服務(wù)層控制層視圖層延遲符新增入校報(bào)備信息—設(shè)計(jì)步驟新增入校報(bào)備信息延遲符1.實(shí)體類@DatapublicclassEnrollmentregistrationimplementsSerializable{privateintid;privateStringreporter;//報(bào)備人privateStringdepartment;//對(duì)接部門

privateDateadmissionTime;//入校時(shí)間

privateStringis_Driving;//是否自駕privateStringnumberPlate;//車牌privateStringreson;//入校事由

//校外人員列表

privateList<Offcampusinfo>offcampusinfoList;

}@DatapublicclassOffcampusinfoimplementsSerializable{privateintid;privateStringname;//姓名privateStringunit;//單位privateStringidNumber;//身份證號(hào)privateStringphone;//手機(jī)號(hào)privateEnrollmentregistrationenrollmentregistration;privateintenrollmentId;}新增入校報(bào)備信息延遲符2.Mapper接口@MapperpublicinterfaceEnrollmentregistrationMapper{//查詢所有入校報(bào)備信息publicList<Enrollmentregistration>selectAllEnrollmentregistration();//新增入校報(bào)備信息publicvoidsaveEnrollmentregistration(Enrollmentregistrationenrollmentregistration);}入校報(bào)備信息Mapper接口:EnrollmentregistrationMapper.java校外人員信息Mapper接口:OffcampusinfoMapper.java@MapperpublicinterfaceOffcampusinfoMapper{publicvoidsaveOffcampusinfo(Offcampusinfooffcampusinfo);}新增入校報(bào)備信息延遲符3.Mapper映射文件<selectid="selectAllEnrollmentregistration"resultMap="enrollmentregistrationMap">select*fromtb_enrollmentregistration</select><insertid="saveEnrollmentregistration"parameterType="cn.js.ccit.pojo.Enrollmentregistration"useGeneratedKeys="true"><selectKeykeyProperty="id"resultType="int"order="AFTER">SELECTLAST_INSERT_ID()ASID</selectKey>insertintotb_enrollmentregistration(reporter,department,admissionTime,departureTime,is_Driving,numberPlate,reson)values(#{reporter},#{department},#{admissionTime},#{departureTime},#{is_Driving},#{numberPlate},#{reson})</insert>(1)入校報(bào)備映射文件:Enrollmentregistration.xml新增入校報(bào)備信息延遲符3.Mapper映射文件<resultMaptype="cn.js.ccit.pojo.Offcampusinfo"

id="offcampusinfoResultMapper"><idproperty="id"column="id"/><resultproperty="name"column="name"/>

……

<!--多對(duì)一映射:association--><associationproperty="enrollmentregistration"

javaType="cn.js.ccit.pojo.Enrollmentregistration"><idproperty="id"column="id"/>

…..

</association></resultMap><insertid="saveOffcampusinfo"parameterType="cn.js.ccit.pojo.Offcampusinfo">insertintotb_offcampusinfo(name,unit,idNumber,phone,enrollmentId)values(#{name},#{unit},#{idNumber},#{phone},#{enrollmentId})</insert>(2)校外人員映射文件:Offcampusinfo.xml新增入校報(bào)備信息延遲符4.服務(wù)層接口實(shí)現(xiàn)類publicinterfaceIEnrollmentregistrationService{

publicList<Enrollmentregistration>selectAllEnrollmentregistration();

publicvoidsaveEnrollmentregistration(Enrollmentregistrationenrollmentregistration);}@ServicepublicclassEnrollmentregistrationServiceimplementsIEnrollmentregistrationService{@AutowiredprivateEnrollmentregistrationMapperenrollmentregistrationMapper;

publicList<Enrollmentregistration>selectAllEnrollmentregistration(){returnenrollmentregistrationMapper.selectAllEnrollmentregistration();

}

publicvoidsaveEnrollmentregistration(Enrollmentregistrationenrollmentregistration){enrollmentregistrationMapper.saveEnrollmentregistration(enrollmentregistration);}}(1)入校報(bào)備信息服務(wù)層接口與實(shí)現(xiàn)類新增入校報(bào)備信息延遲符4.服務(wù)層接口實(shí)現(xiàn)類publicinterfaceIOffcampusinfoService{publicvoidsaveOffcampusinfo(Offcampusinfooffcampusinfo);}@ServicepublicclassOffcampusinfoServiceimplementsIOffcampusinfoService{@AutowiredprivateOffcampusinfoMapperoffcampusinfoMapper;

publicvoidsaveOffcampusinfo(Offcampusinfooffcampusinfo){offcampusinfoMapper.saveOffcampusinfo(offcampusinfo);}}(2)校外人員信息服務(wù)層接口與實(shí)現(xiàn)類新增入校報(bào)備信息延遲符5.控制層@Controller@RequestMapping("/enrollment")publicclassEnrollmentregistrationController{@AutowiredprivateIEnrollmentregistrationServiceenrollmentregistrationService;

@AutowiredprivateIOffcampusinfoServiceoffcampusinfoService;

@RequestMapping("/showAllEnrollmentReistration")publicStringlistAllEnrollmentRegistrations(HttpSessionsession){List<Enrollmentregistration>enrollmentregistrationList=enrollmentregistrationService.selectAllEnrollmentregistration();session.setAttribute("elist",enrollmentregistrationList);return"showEnrollmentRegistrations";}

@RequestMapping(value="/saveEnrollment",produces="application/json;charset=utf-8")@ResponseBodypublicReturnObjectsaveEnrollmentRegistration(@RequestBodyEnrollmentregistrationenrollmentRegistration){

ReturnObjectr=newReturnObject();//返回對(duì)象try{

enrollmentregistrationService.saveEnrollmentregistration(enrollmentRegistration);

for(Offcampusinfooffcampusinfo

:enrollmentRegistration.getOffcampusinfoList()){

offcampusinfo.setEnrollmentId(enrollmentRegistration.getId());offcampusinfoService.saveOffcampusinfo(offcampusinfo);

}

r.setResult("報(bào)備成功");}catch(Exceptione){

r.setResult("報(bào)備失敗");}returnr;……新增入校報(bào)備信息延遲符6.視圖層新增入校報(bào)備信息延遲符

使用SpringMVC的JSON數(shù)據(jù)交互開發(fā)學(xué)工管理系統(tǒng)的新增獎(jiǎng)學(xué)金模塊,要求學(xué)生登錄后,根據(jù)獎(jiǎng)學(xué)金評(píng)選條件申請獎(jiǎng)學(xué)金,使用JSON交互完成新增獎(jiǎng)學(xué)金。拓展訓(xùn)練謝謝觀看主講人:蔣衛(wèi)祥延遲符SpringMVC的RESTful服務(wù)JSON交互與RESTful支持什么是RESTfulESTRESTful(英文:RepresentationalStateTransfer,簡稱REST)描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如web應(yīng)用程序。在目前主流的三種Web服務(wù)交互方案中,REST相比于SOAP(SimpleObjectAccessprotocol,簡單對(duì)象訪問協(xié)議)以及XML-RPC更加簡單明了,無論是對(duì)URL的處理還是對(duì)Payload的編碼,REST都傾向于用更加簡單輕量的方法設(shè)計(jì)和實(shí)現(xiàn)。值得注意的是REST并沒有一個(gè)明確的標(biāo)準(zhǔn),而更像是一種設(shè)計(jì)的風(fēng)格。什么是RESTful簡單來說,RESTful風(fēng)格就是把請求參數(shù)變成請求路徑的一種風(fēng)格。

http://.../queryItems?id=1傳統(tǒng)的URL請求格式為:

http://.../items/1采用RESTful風(fēng)格后,其URL請求為:參數(shù)id=1變成了請求路徑的一部分動(dòng)詞形式的路徑變成了名詞RESTful特征—以資源為基礎(chǔ)

資源可以是一個(gè)圖片、音樂、一個(gè)XML格式、HTML格式或者JSON格式等網(wǎng)絡(luò)上的一個(gè)實(shí)體,除了一些二進(jìn)制的資源外普通的文本資源更多以JSON為載體、面向用戶的一組數(shù)據(jù)(通常從數(shù)據(jù)庫中查詢而得到)。

通過URL地址來標(biāo)識(shí)資源,系統(tǒng)中的每個(gè)對(duì)象或資源都可以通過其URL地址來獲取。

例如:傳統(tǒng)的資源訪問:http://www.xxx?id=1&&name='zhangsan'RESTful資源訪問:http://www.xxx/1/zhangsanRESTful特征—統(tǒng)一接口

對(duì)資源的操作包括獲取、創(chuàng)建、修改和刪除,這些操作正好對(duì)應(yīng)HTTP協(xié)議提供的GET、POST、PUT和DELETE方法。使用RESTful風(fēng)格從接口上可能只能定位其資源,但是無法知曉它具體進(jìn)行了什么操作,需要具體了解其發(fā)生了什么操作動(dòng)作要從其HTTP請求方法類型上進(jìn)行判斷。具體的HTTP方法和方法含義如下:GET(SELECT):從服務(wù)器取出資源(一項(xiàng)或多項(xiàng))。POST(CREATE):在服務(wù)器新建一個(gè)資源。PUT(UPDATE):在服務(wù)器更新資源(客戶端提供完整資源數(shù)據(jù))。PATCH(UPDATE):在服務(wù)器更新資源(客戶端提供需要修改的資源數(shù)據(jù))。DELETE(DELETE):從服務(wù)器刪除資源。RESTful特征—URI指向資源URI統(tǒng)一資源標(biāo)志符用來標(biāo)識(shí)抽象或物理資源的一個(gè)緊湊字符串。URI包括URL和URN,在這里更多時(shí)候可能代指URL(統(tǒng)一資源定位符)。RESTful是面向資源的,每種資源可能由一個(gè)或多個(gè)URI對(duì)應(yīng),但一個(gè)URI只指向一種資源。RESTful特征—無狀態(tài)

服務(wù)器不能保存客戶端的信息,每一次從客戶端發(fā)送的請求中,要包含所有必須的狀態(tài)信息,會(huì)話信息由客戶端保存,服務(wù)器端根據(jù)這些狀態(tài)信息來處理請求。當(dāng)客戶端可以切換到一個(gè)新狀態(tài)的時(shí)候發(fā)送請求信息,當(dāng)一個(gè)或者多個(gè)請求被發(fā)送之后,客戶端就處于一個(gè)狀態(tài)變遷過程中。每一個(gè)應(yīng)用的狀態(tài)描述,可以被客戶端用來初始化下一次的狀態(tài)變遷。SpringMVC的RESTful服務(wù)延遲符在SpringMVC中對(duì)RESTful支持,主要通過以下注解實(shí)現(xiàn)RESTful:@Controller:聲明一個(gè)處理請求的控制器@RequestMapping:請求映射地址到對(duì)應(yīng)的方法,該注解又可以分為一下幾種類型:@GetMapping@PostMpping@PutMapping@DeleteMapping@PatchMapping@ResponsrBody:響應(yīng)內(nèi)容轉(zhuǎn)換為JSON格式@RequestBody:請求內(nèi)容轉(zhuǎn)換為JSON格式@RestContrller:等同@Controller+@ResponsrBodyRESTful綜合案例延遲符學(xué)習(xí)案例案例代碼接下來,使用RESTful完成用戶管理模塊的整體API設(shè)計(jì)。謝謝觀看主講人:蔣衛(wèi)祥延遲符任務(wù)9.2修改入校報(bào)備信息JSON交互與RESTful支持修改入校報(bào)備信息設(shè)計(jì)步驟3.服務(wù)層4.控制層5.視圖層2.Mapper映射文件1.Mapper接口延遲符修改入校報(bào)備信息延遲符1.Mapper接口//根據(jù)id查詢?nèi)胄?bào)備人信息publicEnrollmentregistrationselectEnrollmentregistrationById(intid);//修改報(bào)備人信息publicvoidupdateEnrollmentregistrationById(Enrollmentregistrationenrollmentregistration);入校報(bào)備信息Mapper接口:EnrollmentregistrationMapper.java校外人員信息Mapper接口:EnrollmentregistrationMapper.java//根據(jù)報(bào)備人id查詢校外人員信息publicOffcampusinfoselectOffcampusinfoByEnrollmentId(intenroollmentId);

//修改校外人員信息publicvoidupdateOffcampusinfoById(Offcampusinfooffcampusinfo);修改入校報(bào)備信息延遲符2.Mapper映射文件<selectid="selectAllEnrollmentregistration"resultMap="enrollmentregistrationMap">select*fromtb_enrollmentregistration</select><updateid="updateEnrollmentregistrationById"parameterType="cn.js.ccit.pojo.Enrollmentregistration">updatetb_enrollmentregistrationset

reporter=#{reporter},department=#{department},admissionTime=#{admissionTime},departureTime=#{departureTime},is_Driving=#{is_Driving},numberPlate=#{numberPlate},reson=#{reson}whereid=#{id}</update>(1)入校報(bào)備映射文件:Enrollmentregistration.xml修改入校報(bào)備信息延遲符2.Mapper映射文件<selectid="selectOffcampusinfoByEnrollmentId"parameterType="int"resultMap="offcampusinfoResultMapper">select*fromtb_offcampusinfoo,tb_enrollmentregistrationewhereo.enrollmentId=e.idande.id=#{id}</select><updateid="updateOffcampusinfoById"parameterType="cn.js.ccit.pojo.Offcampusinfo">

updatetb_offcampusinfosetname=#{name},unit=#{unit},idNumber=#{idNumber},phone=#{phone},enrollmentId=#{enrollmentId}whereid=#{id}</update>(2)校外人員映射文件:Offcampusinfo.xml新增入校報(bào)備信息延遲符3.服務(wù)層接口實(shí)現(xiàn)類IEnrollmentregistrationService.javapublicEnrollmentregistrationselectEnrollmentregistrationById(intid);publicvoidupdateEnrollmentregistrationById(Enrollmentregistrationenrollmentregistration);EnrollmentregistrationService.java//根據(jù)id查詢?nèi)胄?bào)備信息publicEnrollmentregistrationselectEnrollmentregistrationById(intid){returnenrollmentregistrationMapper.selectEnrollmentregistrationById(id);}//修改入校報(bào)備信息publicvoidupdateEnrollmentregistrationById(Enrollmentregistrationenrollmentregistration){

enrollmentregistrationMapper.updateEnrollmentregistrationById(enrollmentregistration);}(1)入校報(bào)備信息服務(wù)層接口與實(shí)現(xiàn)類修改入校報(bào)備信息延遲符3.服務(wù)層接口實(shí)現(xiàn)類IOffcampusinfoService.java//根據(jù)id修改校外人員信息publicOffcampusinfoselectOffcampusinfoByEnrollmentId(intenroollmentId);//修改校外人員信息publicvoidupdateOffcampusinfoById(Offcampusinfooffcampusinfo);OffcampusinfoService.javapublicOffcampusinfoselectOffcampusinfoByEnrollmentId(intenroollmentId){returnoffcampusinfoMapper.selectOffcampusinfoByEnrollmentId(enroollmentId);

}

publicvoidupdateOffcampusinfoById(Offcampusinfooffcampusinfo){offcampusinfoMapper.updateOffcampusinfoById(offcampusinfo);}(2)校外人員信息服務(wù)層接口與實(shí)現(xiàn)類修改入校報(bào)備信息延遲符4.控制層

@GetMapping("/findById")publicStringfindEnrollmentregistrationById

(@RequestParam("id")Integerid,Modelmodel){if(enrollmentregistrationList==null

||enrollmentregistrationList.size()==0){

enrollmentregistrationList=enrollmentregistrationService

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論