المفاهيم الأساسية
Spring RestTemplate هو عميل يقدمه الربيع للوصول إلى خدمات REST. يوفر RestTemplate مجموعة متنوعة من الطرق المريحة للوصول إلى خدمات HTTP عن بُعد ، والتي يمكن أن تحسن بشكل كبير من كفاءة كتابة العميل. لذلك ، يستخدم العديد من العملاء مثل Android أو مقدمي خدمات الطرف الثالث RestTemplate لطلب خدمات راحة.
Spring-Web's RestTemplata عبارة عن تغليف لـ HTTP الأساسي لجافا. لم يعد بإمكان المستخدمين الذين يستخدمون RestTemplata الانتباه إلى مؤسسة الاتصال الأساسية. لا يدعم RestTemplata مواصفات REST فحسب ، بل تحدد أيضًا نوع كائن قيمة الإرجاع.
قيد الاستخدام ، يمكنك جديد مباشرة كائن RestTemplate. سيكون هناك بعض محولات الرسائل التي تُرجع الرسائل في كائن RestTemplate الذي أنشأناه. يمكنك العثور على المحول المقابل استنادًا إلى MediaType من البيانات التي تم إرجاعها وإجراء تحويل MediaType. يمكنك أيضًا إنشاء محول الرسائل بنفسك ، وإنشاء فئة ترث ملخص agrussgenerichttpmessageConverter <T> أو تنفذ واجهة httpmessageconverter <T>. تجدر الإشارة إلى أن طريقة canRead وطريقة Canwrite يجب الحكم عليها من قبل نفسك ، وكتابة المعلمات إلى الدفق في طريقة الكتابة أو الكتابة ، والحصول على النتيجة التي تم إرجاعها من جسم الدفق في طريقة القراءة أو القراءة والخريطة.
يقوم كائن RestTemplate بإنشاء طلبات HTTP في الأسفل باستخدام التنفيذ ضمن حزمة Java.net. يمكنك تحديد طرق طلب HTTP المختلفة باستخدام ClientHttPrequestFactory.
توفر واجهة ClientHttPrequestFactory بشكل أساسي طريقتين للتنفيذ:
يستخدم RestTemplate SimpleClientHttPrequestFactory افتراضيًا ، ومكالمات HTTPConnection داخليًا للاتصال بـ JDK. المهلة الافتراضية هي -1. يمكننا تحديد المهلة أنفسنا.
SimpleClientHttPrequestFactory Factory = جديد SimpleClientHttPrequestFactory () ؛ // قم بتعيين مهلة الاتصال ، وحدة Millisecond Factory.setConnectTimeout (5000) RestTemplate restTemplate = جديد restTemplate (مصنع) ؛
استخدم طلبات الحصول على:
url url = "http: // localhost: 80/mandy/login.json؟ account = 123456 & password = 123456" ؛ result res = restTemplate.getForObject (url ، result.class) ؛
RestTemplate Code Source:
Override Public <T> t getForObject (url string ، class <t> responseType ، Object ... urlvariables) يلقي RestClientException {requestCallback requestCallback = ececeDerRequestCallback (rosseType) ؛ httpmessageConverTextractor <T> responsextractor = new httpmessageConverTextractor <T> (ResponseType ، getMessageConverters () ، logger) ؛ إرجاع تنفيذ (url ، httpmethod.get ، requestCallback ، Responsextractor ، urlvariables) ؛ }من الأفضل استخدام الحصول على طلب لصق المعلمات مباشرة على العنوان. أنا لا أعرف لماذا. إذا كنت تستخدم المعلمة الثالثة ، فإن نوع multivaluemap لن يعمل (بعض الأشخاص على الإنترنت يقولون إن استخدام نوع multivaluemap على ما يرام ، لكنني جربته ولكنه لن ينجح)
استخدم طلب البريد:
HashMap <string ، Object> map = new HashMap <string ، Object> () ؛ map.put ("name" ، "test") ؛ map.put ("الحساب" ، "Qwer") ؛ map.put ("كلمة المرور" ، "QWER") ؛ ObjectMapper mapper = new ObjectMapper () ؛ سلسلة jsonstr = null ؛ حاول {jsonstr = mapper.writevalueasString (map) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } // إنشاء كيان رأس http وملء معلومات الرأس ، مثل تنسيق البيانات httpheaders httpheaders = new httpheaders () ؛ httpheaders.setContentType (mediaType.application_json_utf8) ؛ // إنشاء كيان http ، يمكنك استخدام المُنشئ مباشرة لوضع جسم الطلب ورأس الطلب في HttPentity <string> httpentity = new httpentity <string> (jsorder2 ، "http: // localhost: 80/mandy/user_enable.json" ؛ // استدعاء الطريقة لطلب res2 = restTemplate.postForObject (url ، httpentity ، result.class) ؛RestTemplate Code Source:
Override Public <T> t postforObject (url string ، طلب الكائن ، الفئة <T> ResponseType ، Object ... urivariables) يلقي RestClientException {requestCallback requestCallback = httpentityCallback (request ، responsype) ؛ httpmessageConverTextractor <T> responsextractor = new httpmessageConverTextractor <T> (ResponseType ، getMessageConverters () ، logger) ؛ الإرجاع تنفيذ (url ، httpmethod.post ، requestCallback ، Responsextractor ، urivariables) ؛ }استخدم طلبات وضع:
HashMap <String ، Object> map = new HashMap <string ، Object> () ؛ map.put ("user_id" ، "1") ؛ map.put ("Enable" ، 0) ؛ ObjectMapper mapper = new ObjectMapper () ؛ string jsonstr = null ؛ try {jsonstring = mapper.writevalueasstring (map) ؛} e.printstacktrace () ؛} // إنشاء كيان رأس http وملء معلومات الرأس ، مثل تنسيق البيانات httpheaders httpheaders = new httpheaders () httpentity <string> httpentity = new httpentity <string> (jsonstr ، httpheaders) ؛ url url = "http: // localhost: 80/mandy/user_enable.json" ؛ restTemplate.put (url ، httpentity) ؛RestTemplate Code Source:
Override public void pum (url url ، طلب الكائن ، الكائن ... urlvariables) يلقي RestClientException {requestCallback requestCallback = httpentitycallback (request) ؛ تنفيذ (url ، httpmethod.put ، requestCallback ، null ، urlvariables) ؛ }من العيوب الصغيرة لهذه الطريقة أنه لا توجد قيمة إرجاع لنتيجة الطلب. إذا كنت بحاجة إلى استخدام قيمة الإرجاع ، فلا يمكنك استخدام هذه الطريقة.
إذا كنت ترغب في استخدام طلب نوع الحذف ، فهناك فقط المعلمات التالية في عمود المعلمة لطريقة PUT لـ RestTemplate
Overridepublic void delete (url url string ، object ... urlvariables) يلقي RestClientException {execute (url ، httpmethod.delete ، null ، null ، urlvariables) ؛ httpmethod.delete ، null ، null ، urlvariables) ؛}@overridepublic void delete (uri url) RestClientException {execute (url ، httpmethod.delete ، null ، null) ؛}لا تعطينا هذه الطرق معلمات ودعنا نضع محتوى الجسم للطلب ، لذلك إذا كنت ترغب في استخدام طريقة الحذف التي توفرها RestTemplate مباشرة ، يجب أن تستخدم الواجهة نمطًا مريحًا ، ووضع المعلمات في العنوان ، والحصول على المعلمات من خلال التعليق التوضيحي (Value = "").
النقطة الرئيسية: في الواقع ، يمكننا استخدام طريقة التبادل مباشرة لـ RestTemplate ، على النحو التالي
Overridepublic <T> الاستجابة <T> التبادل (url url ، طريقة httpmethod ، httpentity <؟> requestentity ، class <t> rosseType ، object ... urivariables) يلقي RestClientException {requertCallback requestCallback = httpentitycallback (requestentity ، responsype) ؛ ResponseExtractor <receptionentity <t >> reponsextractor = responseentityExtractor (responseType) ؛ إرجاع تنفيذ (url ، method ، requestcallback ، reponsextractor ، urivariables) ؛}هنا ندرج طريقة واحدة فقط. يمكن العثور على الآخرين في رمز المصدر. يمكن أن تجعل هذه الطريقة جميع أنواع الطلبات.
في هذه الطريقة ، يمكن الحصول على معلمة الطريقة من خلال تعداد httpmethod. معلمة الطلب هي كيان httpentity المغطى بنفسه ، بما في ذلك هيئة الطلب ورأس الطلب. المعلمة ResponseType هي فئة رسم الخرائط التي تُرجع النتيجة. تعطيني المعلمة urivariables الانطباع بأنه عديم الفائدة (الرأي الشخصي). يمكن الحصول على واجهة إرجاع الطلب من خلال طريقة getBody () من قيمة إرجاع الطريقة.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.