تشرح المقالة السابقة تكامل SPRING BOOT مع JDBCTEMPLATE و JPA و MYBATIS لتحقيق الوصول إلى قاعدة البيانات. اليوم سوف أشارككم بشكل أساسي كيفية إرجاع البيانات إلى الواجهة الأمامية من خلال Boot Spring.
في عملية التطوير الحالية ، من أجل زيادة فصل الأمام والخلف إلى الحد الأقصى ، توفر واجهة الواجهة الخلفية عادة واجهات البيانات فقط ، وتحصل الواجهة الأمامية على بيانات من الواجهة الخلفية من خلال طلبات AJAX وتقدمها إلى المستخدم. الطريقة الأكثر شيوعًا التي نستخدمها هي أن الواجهة الخلفية ستعيد سلسلة JSON إلى الواجهة الأمامية ، وتوحيد الواجهة الأمامية سلسلة JSON لإنشاء كائن JavaScript ، ثم معالجته. سوف توضح هذه المقالة كيف ينفذ Boot SPRING هذا النموذج. ستركز هذه المقالة على كيفية تصميم واجهة برمجة تطبيقات مريحة وتنفيذ واجهات برمجة التطبيقات ذات الصلة من خلال SPRING BOOT. ومع ذلك ، لكي يفهم الجميع بشكل أفضل واجهة برمجة تطبيقات على الطراز المريح ، سنقوم أولاً بتصميم واجهة إرجاع البيانات التقليدية حتى يتمكن الجميع من فهمها بالمقارنة.
دعنا نأخذ قائمة المقالة كمثال لتنفيذ واجهة تُرجع قائمة المقالات ، والرمز كما يلي:
@controller @requestMapping ("/article") الطبقة العامة ArticLeconTroller {autowired private articleService ؛ requestmapping ("/list.json") @Responsebody List Public List <article> listarticles (عنوان السلسلة ، pagesize ، integer pagenum) {if (pagesize == null) {pagesize = 10 ؛ } if (pagenum == null) {pagenum = 1 ؛ } int offset = (pagenum - 1) * pagesize ؛ إرجاع articleservice.getArticles (العنوان ، 1L ، الإزاحة ، pagesize) ؛ }}إن تنفيذ المقالات بسيطة للغاية ، والتي تغلف ببساطة تشغيل Articlemapper. يمكنك الرجوع إلى المقالة السابقة. فئة تنفيذ المقالات على النحو التالي:
servicepublic class articleserviceImpl تنفذ مقالات {autowired private articlemapper articlemapper ؛ Override Public Savearticle (مقالة requestbody مقالة) {return articlemapper.insertarticle (مقال) ؛ } Override Public List <article> getArticles (عنوان السلسلة ، userD long ، int الإزاحة ، int pagesize) {article article = new article () ؛ article.Settitle (العنوان) ؛ article.setUserId (userId) ؛ إرجاع articlemapper.queryArticlesBypage (المقالة ، الإزاحة ، pagesize) ؛ } Override Public Article getById (long id) {return articlemapper.querybyid (id) ؛ } Override public void updatearticle (مقال مقال) {article.setupDateTime (date ()) ؛ articlemapper.updatearticlebyid (مقال) ؛ }}قم بتشغيل فئة Application.java ، ثم تفضل بزيارة: http: // locahost: 8080/article/list.json ، يمكنك رؤية النتائج التالية:
EntigleServiceImpl هي فئة عادية للغاية ، مع خدمة التعليق التوضيحي الربيعي واحد فقط ، والتي تم تحديدها على أنها فول لسهولة الإدارة من خلال حاويات IOC في الربيع. دعونا نلقي نظرة على فئة ArticleController. في الواقع ، يجب أن يكون أولئك الذين استخدموا Spring MVC على دراية بهذه التعليقات التوضيحية. هنا تفسير موجز:
Controller يحدد فئة كوحدة تحكم.
requestmapping تعيين URL.
ResponseBody إرجاع النتيجة التي تم تحويلها إلى سلسلة JSON.
requestbody يعني تلقي معلمات سلسلة تنسيق JSON.
من خلال هذه التعليقات التوضيحية الثلاثة ، يمكننا بسهولة تنفيذ وظيفة إرجاع بيانات تنسيق JSON إلى الواجهة الأمامية من خلال عناوين URL. ولكن يجب أن يكون الجميع في حيرة من أمري. هل هذه الأشياء من الربيع MVC؟ ما علاقةه بحذاء الربيع؟ في الواقع ، تتمثل وظيفة التمهيد الربيعي في إنقاذ عملية التكوين لنا. يتم بالفعل توفير وظائف أخرى من قبل الربيع والربيع MVC بالنسبة لنا. يجب أن يتذكر الجميع أن SPRING BOOT يوفر لنا خدمات التكوين التلقائي من خلال العديد من المبتدئين. تم تقديم هذه التبعية في مشروعنا من قبل:
<Rependency> <roupiD> org.springframework.boot </rougiD> <ChotifactId> Spring-Boot-Starter-Web </shintifactid> </premed>
هذه حزمة جرة تحتاج جميع مشاريع ويب SPRING BOOT إلى تقديمها. وهذا يعني ، طالما أن مشاريع الويب الخاصة بـ Spring Boot تدعم الوظائف أعلاه بشكل افتراضي. هنا نجد أيضًا أن تطوير هندسة الويب من خلال Spring Boot يوفر لنا الكثير من أعمال التكوين.
حسنًا ، دعنا نلقي نظرة على كيفية تنفيذ واجهة برمجة تطبيقات Restful. في الواقع ، فإن Restful نفسها ليست تقنية عميقة ، ولكن مجرد أسلوب برمجة ، أو أسلوب تصميم. في تصميم واجهة HTTP التقليدية ، نستخدم عمومًا فقط طرق Get and Post ، ثم نستخدم المفردات التي نحددها أنفسنا لتمثيل العمليات المختلفة. على سبيل المثال ، واجهة الاستعلام عن المقالات أعلاه ، نقوم بتحديد المقالة/list.json لتمثيل قوائم المقالات الاستعلام ، والتي يمكن الوصول إليها من خلال طرق الحصول على أو نشر. يستخدم تصميم API Restful HTTP لتمثيل العمليات المتعلقة بـ CRUD. لذلك ، بالإضافة إلى أساليب الحصول على ونشرها ، يتم استخدام طرق HTTP الأخرى أيضًا ، مثل PUT ، حذف ، الرأس ، وما إلى ذلك ، لتمثيل العمليات ذات المعاني المختلفة من خلال طرق HTTP المختلفة. فيما يلي مجموعة من واجهات برمجة التطبيقات المريحة التي صممتها لإضافة المقالات وحذفها وتعديلها والتحقق منها:
| واجهة URL | أساليب HTTP | وصف الواجهة |
| /شرط | بريد | احفظ المقال |
| /المقالة/{id} | يحصل | قائمة مقالات الاستعلام |
| /المقالة/{id} | يمسح | حذف المقالات |
| /المقالة/{id} | يضع | تحديث معلومات المقالة |
يمكن ملاحظة هنا أن عنوان URL هو مجرد وسيلة لتحديد الموارد ، ويتم تحديد السلوك المحدد بواسطة طريقة HTTP.
الآن دعنا نلقي نظرة على كيفية تنفيذ الواجهة أعلاه. لن أقول الكثير عن ذلك ، فقط انظر إلى الكود:
@restController @requestMapping ("/rest") الطبقة العامة ArticLerestController {Autowired private articleservice ؛ requestMapping (value = "/article" ، method = post ، reductes = "application/json") public webresponse <map <string ، object >> saveArticle (arquestbody article) {article.setuserid (1L) ؛ entlicservice.savealicle (مقال) ؛ الخريطة <string ، object> ret = new hashmap <> () ؛ ret.put ("id" ، article.getId ()) ؛ WebResponse <map <string ، object >> reponse = webresponse.getSuccessResponse (ret) ؛ استجابة العودة ؛ } @requestmapping (value = "/article/{id}" ، method = delete ، reduces = "application/json") public webresponse <؟> deletearticle ( @pathvarable long id) {article article = etsionservice.getById (id) ؛ article.setStatus (-1) ؛ Enticleservice.updatearticle (مقال) ؛ WebResponse <Object> response = webresponse.getSuccessResponse (null) ؛ استجابة العودة ؛ } @requestmapping (value = "/article/{id}" ، method = put ، reduces = "application/json") public webresponse <Object> updatearticle (pathVariable id id ، requestbody article) {article.setId (id) ؛ Enticleservice.updatearticle (مقال) ؛ WebResponse <Object> response = webresponse.getSuccessResponse (null) ؛ استجابة العودة ؛ } @requestmapping (value = "/article/{id}" ، method = get ، reduces = "application/json") public webresponse <article> getArticle ( @pathvariable long) {article article = articleservice.getById (id) ؛ webresponse <article> repressing = webresponse.getSuccessResponse (article) ؛ استجابة العودة ؛ }}دعونا نحلل هذا الرمز مرة أخرى. الفرق بين هذا الرمز والرمز السابق هو:
(1) نحن نستخدم شرح RestController ، وليس Controller. ومع ذلك ، لا يتم توفير هذا التعليق التوضيحي أيضًا بواسطة SPRING BOOT ، ولكن التعليق التوضيحي المقدم في Spring MVC4 ، يشير إلى وحدة تحكم تدعم RESTful.
(2) هناك ثلاث خرائط عناوين URL في هذه الفئة هي نفسها ، أي أنها جميعًا /مقالة /{id} ، والتي لا يُسمح بها بالظهور في الفصل الذي حدده Controller. هنا ، يمكننا تمييزه بالطريقة. تتمثل وظيفة إنتاجها في الإشارة إلى أن نوع نتيجة الإرجاع هو JSON.
(3) يتم توفير التعليق التوضيحي @PathVariable بواسطة Spring MVC. تتمثل وظيفتها في الإشارة إلى أن قيمة المتغير يتم الحصول عليها من مسار الوصول.
لذلك بعد كل شيء ، لا يزال هذا الرمز ليس له علاقة مع SPRING BOOT. يوفر SPRING BOOT وظائف تكوين تلقائية فقط ، وهو أيضًا سبب مهم لاستخدام حذاء الربيع للغاية ، لأنه غازي للغاية ولا تشعر بوجوده بشكل أساسي.
بعد انتهاء الكود ، كيفية اختباره؟ باستثناء طريقة GET ، لا يمكننا الوصول إليها مباشرة من خلال المتصفح. بالطبع ، يمكننا إرسال طلبات HTTP المختلفة مباشرة من خلال ساعي البريد. ومع ذلك ، ما زلت أؤيد اختبار الطرق المختلفة من خلال فئات اختبار الوحدة. هنا سنختبر كل طريقة من خلال Junit:
Runwith (springJunit4ClassRunner.Class) springBoottest (الفئات = application.class) الفئة العامة articleControllerTest {autowired private articlerestController restController ؛ mockmvc الخاص MVC ؛ before public void setup () يلقي استثناء {mvc = mockmvcbuilders.standalonesetup (restController) .build () ؛ } test public void testAddArticle () يلقي استثناء {article article = new article () ؛ المادة. article.settype (1) ؛ article.setStatus (2) ؛ article.setsummary ("هذا مقال اختبار") ؛ gson gosn = new gson () ؛ requestBuilder Builder = mockmvcrequestbuilders .post ("/rest/article") .accept (mediaType.application_json) .ContentType (mediaType.application_json_utf8) .Content (gosn.tojson (article)) ؛ نتيجة MvCresult = mvc.perform (builder) .andreturn () ؛ system.out.println (result.getResponse (). getContentAssTring ()) ؛ } test public void testupdatearticle () يلقي استثناء {article article = new article () ؛ article.SetTitle ("تحديث مقالة اختبار") ؛ article.settype (1) ؛ article.setStatus (2) ؛ article.setsummary ("هذه مقالة اختبار تحديث") ؛ gson gosn = new gson () ؛ requestBuilder Builder = mockmvcrequestbuilders .put ("/rest/article/1") .accept (mediaType.application_json) .ContentType (mediaType.application_json_utf8) .Content (gosn.tojson (article)) ؛ نتيجة MvCresult = mvc.perform (builder) .andreturn () ؛ } test public void testqueryarticle () يلقي استثناء {requestBuilder builder = mockmvCrequestBuilders .get ("/rest/article/1") .accept (mediaType.application_json) .ContentTytype (mediaType.application_json_utf8) ؛ نتيجة MvCresult = mvc.perform (builder) .andreturn () ؛ system.out.println (result.getResponse (). getContentAssTring ()) ؛ } test public void testDeletearticle () يلقي استثناء {requestBuilder builder = mockmvcrequestbuilders .delete ("/rest/article/1") .Accept (mediaType.application_json) .ContentType (MediaType.application_json_json_utf8) ؛ نتيجة MvCresult = mvc.perform (builder) .andreturn () ؛ }}لن أنشر نتائج التنفيذ هنا. إذا كنت مهتمًا ، فيمكنك تجربة ذلك بنفسك. لا تزال هناك نقاط قليلة جدًا لشرحها في الفصل بأكمله. السبب الرئيسي لهذه الأشياء هو أنه لا علاقة له مع الحذاء الربيعي. سبب دعم هذه العمليات هو تقديم المبتدئ المقابل المذكور في المقالة السابقة:
<Rependency> <roupeD> org.springframework.boot </rougiD> <intifactid> Spring-boot-starter-test </stiftiD>
نظرًا لأن طلبات HTTP يجب تنفيذها ، يتم استخدام MockMVC هنا. يتم إنشاء مثيل له من خلال الحقن ولا يمكن أن يكون جديدًا مباشرة. بخلاف ذلك ، لا يمكن إدارة ArticLerestController من خلال حاويات IOC في فصل الربيع ، لذلك لا يمكن حقن الفصول الأخرى التي تعتمد عليها بشكل طبيعي. من خلال MockMVC ، يمكننا بسهولة تنفيذ HTTP DELETE/PUT/POST وطرق أخرى.
تشرح هذه المقالة أنه إذا تم استخدام SPRING Boot لتنفيذ API RESTFLE ، يتم توفير معظم الأشياء بواسطة MVC الربيع والربيع ، ويوفر SPRING BOOT وظائف تكوين تلقائية فقط. ومع ذلك ، فإن هذا التكوين التلقائي هو الذي يقلل من أعمال التطوير والصيانة بالنسبة لنا ، مما يسمح لنا بتنفيذ مشروع ويب ببساطة وكفاءة ، حتى نتمكن من التركيز أكثر على تطوير الأعمال نفسها دون الاهتمام بالإطار. في هذه المقالة ، ذكرنا أنه يمكننا الوصول إلى الواجهة المريحة من خلال Postman و Junit. في المقالة التالية ، سنقدم طريقة أخرى للوصول إليها. إذا كنت مهتمًا ، فيمكنك الاستمرار في الانتباه.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.