في هذه المقالة ، سنكتب خدمة CRUD Restful WebService باستخدام Spring MVC 4 ، وكتابة عميل REST مع RestTemplate لاستهلاك تلك الخدمات. وسنختبر أيضًا تلك الخدمات باستخدام العملاء الخارجيين. مقدمة قصيرة وسريعة ل REST REST لتقف على نقل الدولة تمثيلي. هو أسلوب معماري يمكن استخدامه لتصميم خدمات الويب ، والتي يمكن استهلاكها من مجموعة متنوعة من العملاء. الفكرة الأساسية هي أنه بدلاً من استخدام آليات معقدة مثل CORBA أو RPC أو SOAP للربط بين الأجهزة ، يتم استخدام HTTP بسيط لإجراء مكالمات فيما بينها. في التصميم القائم على الراحة ، يتم التلاعب بالموارد باستخدام مجموعة مشتركة من الأفعال. لإنشاء مورد: يجب استخدام HTTP POST لاسترداد مورد: يجب استخدام HTTP GET لتحديث مورد: يجب استخدام HTTP PUT حذف مورد: يجب استخدام HTTP DELETE ويعني ذلك أنك بصفتك مطور خدمة REST أو عميل ، يجب أن تلتزم بالمعايير المذكورة أعلاه ، حتى يتم تقديم REST للشكوى. غالباً ما تقوم خدمات الويب التي تستند إلى الاستراحة بإرجاع JSON أو XML كرد ، على الرغم من أنها لا تقتصر على هذه الأنواع فقط. يمكن للعملاء تحديد (باستخدام رأس HTTP Accept) نوع المورد الذي يهتمون به ، وقد يقوم الخادم بإرجاع المورد ، مع تحديد نوع المحتوى للمورد الذي يقدمه. يجب قراءة رابط StackOverflow هذا لفهم REST بالتفصيل. فيما يلي وحدة تحكم محتملة تستند إلى Rest ، وهي تنفيذ REST API. قلت ممكن ، يعني الآخرون قد تنفذها بطريقة أخرى ، لا تزال (أو حتى أكثر نقاء) تتفق مع نمط REST. هذا ما تفعله REST API: طلب GET إلى / api / user / يعرض قائمة بالمستخدمين يؤدي طلب GET إلى / api / user / 1 إلى إرجاع المستخدم الذي يحمل المعرّف 1 طلب POST إلى / api / user / مع كائن مستخدم حيث يقوم JSON بإنشاء مستخدم جديد طلب PUT إلى / api / user / 3 مع كائن مستخدم حيث يقوم JSON بتحديث المستخدم بالمعرف 3 يحذف طلب DELETE إلى / api / user / 4 المستخدم بالمعرف 4 طلب DELETE إلى / api / user / يحذف جميع المستخدمين حزمة كوم. UserService. RestController فئة عامة HelloWorldRestController {Autowired UserService userService؛ // الخدمة التي ستقوم بكل عمل استرجاع البيانات / التلاعب // ------------------- استرداد جميع المستخدمين -------------- ------------------------------------------RequestMapping (value = '/ user / '، method = RequestMethod. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك القديمةGET) Public ResponseEntity> listAllUsers () {قائمة المستخدمين = userService. isEmpty ()) {return new ResponseEntity> (HttpStatus. NO_CONTENT) ؛ / / يقرر الكثيرون إرجاع HttpStatus. NOT_FOUND} عودة جديدة ResponseEntity> (المستخدمين ، HttpStatus. حسنا)؛ } // ------------------- استرداد مستخدم واحد ------------------------- -------------------------------RequestMapping (value = '/ user / {id}'، method = RequestMethod. APPLICATION_JSON_VALUE) public ResponseEntity getUser (PathVariable ('id') معرف طويل) {النظام. println ('جلب المستخدم برقم التعريف' + المعرّف) ؛ مستخدم المستخدم = userService. findById (معرف)؛ إذا (user == null) {النظام. println ('User with id' + id + 'not found')؛ عودة جديدة ResponseEntity (HttpStatus. غير معثور عليه)؛ } عودة جديدة ResponseEntity (مستخدم ، HttpStatus. حسنا)؛ } // ------------------- إنشاء مستخدم ------------------------- -------------------------------RequestMapping (value = '/ user /'، method = RequestMethod. POST) public ResponseEntity createUser (RequestBody User user، UriComponentsBuilder ucBuilder) {النظام. getName () + 'موجودة بالفعل')؛ عودة جديدة ResponseEntity (HttpStatus. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك كاملةsaveUser (المستخدم)؛ رؤوس رؤوس HttpHeaders = رؤوس جديدة () ؛ رؤوس. توري ())؛ عودة جديدة ResponseEntity (رؤوس ، HttpStatus. خلقت)؛ } // ------------------- تحديث مستخدم ------------------------- -------------------------------RequestMapping (value = '/ user / {id}'، method = RequestMethod. PUT) عام UpdateSntity التحديث المستخدم (PathVariable ('id') معرف طويل ، @ UserRequestBody المستخدم) {النظام. println ('تحديث المستخدم' + المعرف) ؛ المستخدم currentUser = userService. findById (معرف)؛ if (currentUser == null) {النظام. println ('User with id' + id + 'not found')؛ عودة جديدة ResponseEntity (HttpStatus. updateUser (currentUser)؛ عودة جديدة ResponseEntity (currentUser، HttpStatus. حسنا)؛ } // ------------------- حذف مستخدم ------------------------- -------------------------------RequestMapping (value = '/ user / {id}'، method = RequestMethod. DELETE) public ResponseEntity deleteUser (PathVariable ('id') id طويلة) {النظام. println ('جلب وحذف المستخدم بمعرف' + رقم تعريف) ؛ مستخدم المستخدم = userService. findById (معرف)؛ إذا (user == null) {النظام. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك تويترالمستخدم مع معرف '+ معرف +' غير موجود ') ؛ عودة جديدة ResponseEntity (HttpStatus. deleteUserById (معرف)؛ عودة جديدة ResponseEntity (HttpStatus. لا يوجد محتوى)؛ } // ------------------- حذف جميع المستخدمين ------------------------- -------------------------------RequestMapping (value = '/ user /'، method = RequestMethod. DELETE) public ResponseEntity deleteAllUsers () {النظام. println ('حذف جميع المستخدمين') ؛ userService. deleteAllUsers ()؛ عودة جديدة ResponseEntity (HttpStatus. لا يوجد محتوى)؛ }} شرح مفصل : @ RestController: أولاً ، نحن نستخدم التعليق الجديدRestController في Spring 4 s. يلغي هذا التعليق الحاجة إلى شرح كل طريقة باستخدامResponseBody. تحت غطاء محرك السيارة ، فإنRestController هو نفسه مذكور عليه بـResponseBody ، ويمكن اعتباره مزيجًا منController وResponseBody. RequestBody: إذا كانت معلمة أسلوب مشفرة باستخدامRequestBody ، فسيقوم Spring بربط نص طلب HTTP الوارد (لعنوان URL المذكور فيRequestMapping لتلك الطريقة) إلى هذا المعامل. أثناء القيام بذلك ، سيقوم Spring (من خلف الكواليس) باستخدام محولات رسائل HTTP لتحويل نص طلب HTTP إلى كائن مجال [إلغاء تسلسل نص الطلب إلى كائن المجال] ، بناءً على رأس ACCEPT أو Content-Type الموجود في الطلب. ResponseBody: إذا تم وضع علامة على إحدى الطرق باستخدامResponseBody ، فسيقوم Spring بربط قيمة الإرجاع بجهاز استجابة HTTP الصادر. أثناء إجراء ذلك ، سيستخدم Spring [من خلف الكواليس] محولات رسائل HTTP لتحويل قيمة الإرجاع إلى نص استجابة HTTP [إجراء تسلسل للكائن إلى نص الاستجابة] ، استنادًا إلى نوع المحتوى موجود في عنوان طلب HTTP. كما سبق ذكره ، في الربيع 4 ، يمكنك التوقف عن استخدام هذا التعليق التوضيحي. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك كاملةالشيء الجيد هو أنه يمكنك التحكم في أي شيء يدخل في ذلك. يأتي مع العديد من المنشئين لنقل المعلومات التي تريد إرسالها في استجابة HTTP. PathVariable يشير هذا التعليق التوضيحي إلى أن معلمة أسلوب يجب أن تكون مرتبطة بمتغير قالب URI [الموجودة في & apos؛ {} & apos؛]. بشكل أساسي ،RestController وRequestBody و ResponseEntity &PathVariable هي كل ما تحتاج إلى معرفته لتنفيذ REST API في Spring 4. بالإضافة إلى ذلك ، يوفر الربيع العديد من فصول الدعم لمساعدتك في تنفيذ شيء مخصص. MediaType: باستخدام التعليق التوضيحيRequestMapping ، يمكنك بالإضافة إلى ذلك ، تحديد MediaType الذي سيتم إنتاجه أو استهلاكه (باستخدام ينتج أو يستهلك السمات) بواسطة طريقة وحدة التحكم هذه ، وذلك لتضييق نطاق التعيين. في نهاية اليوم ، هو مجرد فئة تحكم عادي ، جزء من تطبيق قادر على النشر. [يتم عرض رمز التطبيق الكامل القابل للتنزيل بشكل أكبر في المشاركة التي يمكنك نشرها مباشرة في الحاوية). سأقوم بنشره ، لكي أرى الأشياء حية وناقش كل عملية بالتفصيل. التطبيق المنتشر متاح في http: // localhost: 8080 / Spring4MVCCRUDRestService. لاختبار واجهة برمجة التطبيقات هذه ، سأستخدم عميل خارجي POSTMAN (امتداد من CHROME). استرجاع جميع المستخدمين افتح أداة POSTMAN ، وحدد نوع الطلب [GET لـ usecase] ، وحدد uri للتشغيل. انقر على إرسال ، ستتلقى قائمة بجميع المستخدمين. قد تتساءل عن كيفية إرسال الاستجابة كسلسلة JSON ، ويؤكد رأس Content-Type في الإجابة ذلك. هذا يرجع إلى حقيقة أننا أدرجنا مكتبة جاكسون في مشروعنا. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك غرام3 منذ ربيع يجد هذه المكتبة في مسار الطبقة ، فإنه يستدعي inbuilt محول MappingJackson2HttpMessageConverter لتحويل الاستجابة (قائمة الكائنات) إلى JSON. الشيء الجيد عن محولات الربيع يحمل في ثناياه عوامل أن معظم الوقت يحتاج فقط إلى مكتبة معينة في classpath لإجراء التحويل. بالطبع في وقت ما نحن بحاجة إلى تكييف API / التطبيق لدينا كذلك. على سبيل المثال ، إذا أردنا عرض XML أيضًا ، يجب علينا إضافة تعليقات إلى فئة المستخدم مع تقديمات JAXB المناسبة. استرداد مستخدم واحد حدد GET مع / user / 1 ، انقر فوق إرسال. حاول الآن إرسال GET مع معرف غير صالح ، يجب أن تتلقى HTTP 404. انشاء مستخدم حدد الطريقة كـ POST ، حدد uri باسم / user / ، وحدد النص في علامة التبويب POSTMAN ، وحدد النوع [application / json]. ربما لاحظت أن POSTMAN يضيف تلقائيًا نوع محتوى رأس. إلى جانب طلب POST و PUT ، يقوم العملاء بإرسال البيانات إلى الخادم ويجب عليهم تحديد نوع المحتوى الفعلي للبيانات التي يتم إرسالها. تذكر: قبول العنوان يقول عن نوع العميل الذي يمكنه فهمه. يشير عنوان نوع المحتوى إلى نوع البيانات الفعلي. يجب أن تشاهد استجابة HTTP 200 بدون وجود نص (كأن لا يرسل API أي شيء في الجسم). تحميل لعبة زوما مجانا وبدون تسجيل بالكراك تويترولكن يجب عليك العثور على عنوان الموقع الذي يحدد الموقع الذي يمكن العثور عليه للمستخدم الذي تم إنشاؤه حديثًا. يمكنك الآن جلب المستخدم الذي تم إنشاؤه حديثًا. ولكن لا يمنعك أحد إذا كنت تريد إرسال المحتوى في نص الاستجابة لطلب POST / PUT. هل لا يزال هذا هو REST شكوى API؟ انها نقطة قابلة للنقاش. على أي حال ، دعونا نحاول إنشاء نفس المستخدم مرة أخرى. تحديث مستخدم إرسال طلب HTTP PUT لتحديث مستخدم. أرسل على طول تفاصيل المستخدم الجديدة ليتم وضعها. لاحظ أننا تلقينا هيئة استجابة هذه المرة. هذا لأن تطبيق الأسلوب في وحدة التحكم يتم إرسالها. مرة أخرى ، قد يقرر المرء عدم إرسال التفاصيل المحدثة في نص الاستجابة ، وإرسال عنوان الموقع فقط (كما هو الحال في الإنشاء). التحقق من المستخدمين بعد الحذف - كل أداة Postman التي استخدمناها أعلاه هي عميل رائع لاختبار واجهة برمجة تطبيقات Rest. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك غرامولكن إذا كنت ترغب في استخدام خدمات الويب المستندة إلى REST من التطبيق الخاص بك ، فستحتاج إلى عميل REST لتطبيقك. أحد عملاء HTTP الأكثر شعبية هو Apache HttpComponents HttpClient. لكن التفاصيل للوصول إلى خدمات REST باستخدام هذا منخفضة للغاية. توفر RestTemplate أساليب أعلى مستوى تتوافق مع كل من طرق HTTP الستة الرئيسية التي تجعل استدعاء العديد من خدمات RESTful أحادية الخطوط وتطبيق أفضل ممارسات REST. يوجد أدناه أساليب HTTP وأساليب RestTemplate المقابلة للتعامل مع هذا النوع من طلب HTTP. أساليب HTTP وأساليب RestTemplate المقابلة: HTTP GET: getForObject ، getForEntity HTTP PUT: put (String url، Object request، String urlVariables) حذف HTTP: حذف HTTP POST: postForLocation (String url، Request object، String urlVariables)، postForObject (String url، Object request، Class responseType، String uriVariables) عنوان HTTP: headForHeaders (String url، String urlVariables) خيارات HTTP: optionsForAllow (String url، String urlVariable) HTTP PATCH وغيرها: تبادل تنفيذ مخصص العميل الراحة ، تستهلك خدمات REST التي تم إنشاؤها في وقت سابق. المستعمل؛ فئة عامة SpringRestTestClient {public static final String REST_SERVICE_URI = 'http: // localhost: 8080 / Spring4MVCCRUDRestService'؛ / * GET * /SuppressWarnings ('بدون تحديد') قائمة الفراغ الاستاتيكية الخاصة AllUsers () {النظام. println ('Testing listAllUsers API -----------')؛ RestTemplate restTemplate = جديد RestTemplate ()؛ قائمة> usersMap = restTemplate. getForObject (REST_SERVICE_URI + '/ user /' ، قائمة. صف دراسي)؛ if (userMap! = null) {for (LinkedHashMap map: usersMap) {System. الحصول على ('الاسم') + '، العمر =' + الخريطة. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك تويتراحصل على ('العمر') + '، المرتب =' + الخريطة. الحصول على ( 'الراتب')) ؛؛ }} آخر {النظام. println ('لا يوجد مستخدم موجود ----------')؛ }} / * GET * / private static void getUser () {النظام. println ('Testing getUser API ----------')؛ RestTemplate restTemplate = جديد RestTemplate ()؛ مستخدم المستخدم = restTemplate. getForObject (REST_SERVICE_URI + '/ user / 1' ، المستخدم. println (المستخدم)؛ } / * POST * / private static void createUser () {النظام. println ('Testing create User API ----------')؛ RestTemplate restTemplate = جديد RestTemplate ()؛ مستخدم المستخدم = مستخدم جديد (0، 'Sarah'، 51،134)؛ URI uri = restTemplate. postForLocation (REST_SERVICE_URI + '/ user /' ، المستخدم ، المستخدم. toASCIIString ())؛ } / * PUT * / private static void updateUser () {النظام. println ('اختبار التحديث المستخدم API ----------') ؛ RestTemplate restTemplate = جديد RestTemplate ()؛ مستخدم المستخدم = مستخدم جديد (1 ، 'تومي' ، 33 ، 70000) ؛ restTemplate. put (REST_SERVICE_URI + '/ user / 1'، user)؛ النظام. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك كاملةprintln (المستخدم)؛ } / * DELETE * / private static void deleteUser () {النظام. println ('Testing delete User API ----------')؛ RestTemplate restTemplate = جديد RestTemplate ()؛ restTemplate. حذف (REST_SERVICE_URI + '/ المستخدم / 3')؛ } / * DELETE * / private static void deleteAllUsers () {النظام. println ('Testing all delete Users API ----------')؛ RestTemplate restTemplate = جديد RestTemplate ()؛ restTemplate. حذف (REST_SERVICE_URI + '/ المستخدم /')؛ } عامة ثابتة باطلة رئيسية (String args []) {listAllUsers ()؛ getUser ()؛ createUser ()؛ listAllUsers ()؛ updateUser ()؛ listAllUsers ()؛ مسح المستخدم()؛ listAllUsers ()؛ deleteAllUsers ()؛ listAllUsers ()؛ }} إعادة تشغيل الخادم (في مثالنا ، يتم إصلاح البيانات على جانب الخادم. الإخراج من فوق برنامج العميل اختبار listAllUsers API ----------- المستخدم: id = 1، Name = Sam، Age = 30، Salary = 70000. 0 المستخدم: id = 2، Name = Tom، Age = 40، Salary = 50000. 0 المستخدم: id = 3، Name = Jerome، Age = 45، Salary = 30000. 0 المستخدم: id = 4، Name = Silvia، Age = 50، Salary = 40000. 0 اختبار getUser API ---------- المستخدم [id = 1، name = Sam، age = 30، salary = 70000. 0] اختبار إنشاء واجهة برمجة تطبيقات المستخدم ---------- الموقع: http: // localhost: 8080 / Spring4MVCCRUDRestService / user / 5 Testing listAllUsers API ----------- المستخدم: id = 1 ، الاسم = سام ، العمر = 30 ، المرتب = 70000. 0 المستخدم: id = 2، Name = Tom، Age = 40، Salary = 50000. 0 المستخدم: id = 3، Name = Jerome، Age = 45، Salary = 30000. 0 المستخدم: id = 4، Name = Silvia، Age = 50، Salary = 40000. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك كاملة0 المستخدم: id = 5، Name = Sarah، Age = 51، Salary = 134. 0 اختبار التحديث المستخدم API ---------- المستخدم [id = 1، name = Tomy، age = 33، salary = 70000. 0] قائمة الاختبار AllUsers API ----------- المستخدم: id = 1، Name = Tomy، Age = 33، Salary = 70000. 0 المستخدم: id = 2، Name = Tom، Age = 40، Salary = 50000. 0 المستخدم: id = 3، Name = Jerome، Age = 45، Salary = 30000. 0 المستخدم: id = 4، Name = Silvia، Age = 50، Salary = 40000. 0 المستخدم: id = 5، Name = Sarah، Age = 51، Salary = 134. 0 اختبار حذف API المستخدم ---------- قائمة الاختبار AllUsers API ----------- المستخدم: id = 1، Name = Tomy، Age = 33، Salary = 70000. 0 المستخدم: id = 2، Name = Tom، Age = 40، Salary = 50000. 0 المستخدم: id = 4، Name = Silvia، Age = 50، Salary = 40000. 0 المستخدم: id = 5، Name = Sarah، Age = 51، Salary = 134. 0 اختبار جميع حذف API المستخدمين ---------- اختبار listAllUsers API ----------- لا يوجد مستخدم ---------- 4. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك غرامspringmvc Spring4MVCCRUDRestService الحرب 1. 0 Spring4MVCCRUDRestService Maven Webapp 4. springframework الربيع webmvc $ {springframework. springframework spring-tx $ {springframework. 4 src / main / webapp Spring4MVCCRUDRestService false Spring4MVCCRUDRestService package com. المستعمل؛ الواجهة العامة UserService {User findById (معرف طويل)؛ user findByName (اسم السلسلة) ؛ void saveUser (مستخدم المستخدم)؛ void updateUser (مستخدم المستخدم)؛ void deleteUserById (معرف طويل)؛ قائمة findAllUsers ()؛ void deleteAllUsers ()؛ boolean العامة isUserExist (مستخدم المستخدم)؛ } حزمة كوم. المستعمل؛ Service ('userService') @ الفئة العامة Transrelional UserServiceImpl بتنفيذ UserService {private static final AtomicLong counter = new AtomicLong ()؛ مستخدمين قائمة خاصة ثابتة static {users = populateDummyUsers ()؛ } القائمة العامة findAllUsers () {إرجاع المستخدمين؛ } عام user findById (معرف طويل) {لـ (مستخدم المستخدم: المستخدمين) {if (user. getId () == id) {المستخدم السابق ؛ }} إرجاع فارغة؛ } عام user findByName (اسم السلسلة) {لـ (مستخدم المستخدم: المستخدمين) {if (user. equalsIgnoreCase (الاسم)) {مستخدم الرجوع؛ }} إرجاع فارغة؛ } public void saveUser (مستخدم المستخدم) {المستخدم. إضافة (المستخدم)؛ } public void updateUser (مستخدم المستخدم) {int index = users. مجموعة (مؤشر ، مستخدم) ؛ } public void deleteUserById (id long) {for (Iterator iterator = users. إزالة()؛ }}} boolean public isUserExist (مستخدم المستخدم) {return findByName (user. getName ()) = فارغة!. } private static List populateDummyUsers () {قائمة المستخدمين = ArrayList الجديد ()؛ المستخدمين. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك تويترتحميل برنامج internet download manager 2019 كامل تلقائيا للأبد. incrementAndGet ()، 'Sam'، 30، 70000))؛ المستخدمين. incrementAndGet ()، 'Tom'، 40، 50000))؛ المستخدمين. incrementAndGet ()، 'Jerome'، 45، 30000))؛ المستخدمين. incrementAndGet ()، 'Silvia'، 50، 40000))؛ عودة المستخدمين } الفراغ العام deleteAllUsers () {المستخدمين. نموذج؛ فئة عامة المستخدم {معرف طويل خاص؛ اسم السلسلة الخاص العمر الخاص راتب خاص مزدوج مستخدم عام () {id = 0؛ } المستخدم العام (معرف طويل ، اسم السلسلة ، عمر الباحث ، الراتب المزدوج) {هذا. الراتب = الراتب } عام طويل getId () {معرف عائد؛ } الفراغ العام setId (معرف طويل) {هذا. id = id؛ } getName اسم السلسلة العامة () {اسم الإرجاع؛ } عام void setName (اسم السلسلة) {هذا. اسم = اسم؛ } public int getAge () {return age؛ } الفراغ العام setAge (int عمر) {هذا. العمر = العمر } العامة المزدوجة getSalary () {راتب العودة ؛ } الفراغ العام setSalary (الراتب المزدوج) {هذا. الراتب = الراتب }Uverride int hashCode public () final int prime = 31؛ النتيجة int = 1؛ result = prime * result + (int) (id ^ (id >>> 32))؛ نتيجة العودة }Override منطقي عام يساوي (كائن obj) {if (this == obj) return true؛ if (obj == null) return false؛ if (getClass ()! برنامج تعديل الفيديو والكتابة عليها عربي بالصور. = obj. إرجاع getClass ()) false؛ المستخدم الآخر = (المستخدم) obj؛ إذا (معرف! = أخرى. معرف) عاد صحيح }Override public String toString () {return 'User [id =' + id id '، name =' + name + '، age =' + age + '، salary =' + salary + ']'؛ }} حزمة كوم. تحميل لعبة زوما مجانا وبدون تسجيل بالكراك تويترEnableWebMvc. ConfigurationEnableWebMvcComponentScan (basePackages = 'com. springmvc ') الطبقة العامة HelloWorldConfiguration {} package com. AbstractAnnotationConfigDispatcherServletInitializer. الفئة العامة HelloWorldInitializer يمتد AbstractAnnotationConfigDispatcherServletInitializer {@ حماية الطبقة الأصلية [] getRootConfigClasses () {return new Class [] {HelloWorldConfiguration. صف دراسي }؛ } @ المحمي من الدرجة الأولى [] getServletConfigClasses () {return null؛ }Override protected String [] getServletMappings () {return new String [] {'/'}؛ }} إضافة دعم CORS إلى REST API الخاص بك أثناء الوصول إلى واجهة برمجة تطبيقات REST ، قد تواجه مشكلات تتعلق بسياسة المحتوى الأصلي. أخطاء مثل: لا يوجد رأس Access-Control-Allow-Origin موجود على المورد المطلوب. أو لا يمكن تحميل XMLHttpRequest http: // abc. مصدر http: // localhost: 12345 غير مسموح به بواسطة Access-Control-Allow-Origin.
0 Comments
Leave a Reply. |
AuthorWrite something about yourself. No need to be fancy, just an overview. Archives
February 2019
Categories |