Konsep Dasar
Spring RestTemplate adalah klien yang disediakan oleh Spring untuk mengakses layanan REST. RestTemplate menyediakan berbagai cara yang nyaman untuk mengakses layanan HTTP jarak jauh, yang dapat sangat meningkatkan efisiensi penulisan klien. Oleh karena itu, banyak klien seperti Android atau penyedia layanan pihak ketiga menggunakan RestTemplate untuk meminta layanan REST.
Resttemplata Spring-Web adalah enkapsulasi HTTP Java yang mendasari. Pengguna yang menggunakan resttemplata tidak dapat lagi memperhatikan pembentukan koneksi yang mendasarinya. Resttemplata tidak hanya mendukung spesifikasi lainnya, tetapi juga mendefinisikan tipe objek nilai pengembalian.
Dalam digunakan, Anda dapat secara langsung membuat objek RestTemplate. Akan ada beberapa konverter pesan yang mengembalikan pesan di objek RestTemplate yang kami buat. Anda dapat menemukan konverter yang sesuai berdasarkan mediatype dari data yang dikembalikan dan melakukan konversi mediatype. Anda juga dapat membuat konverter pesan sendiri, membuat kelas yang mewarisi AbstractGeneriChtpMessageConverter <T> kelas atau mengimplementasikan antarmuka httpmessageConverter <T>. Perlu dicatat bahwa metode CANREAD dan metode CANWRITE harus dinilai sendiri, menulis parameter ke aliran dalam metode Writinginternal atau Write, dan dapatkan hasil yang dikembalikan dari tubuh aliran dalam metode readinternal atau baca dan type peta.
Objek RestTemplate membuat permintaan HTTP di bagian bawah dengan menggunakan implementasi di bawah paket java.net. Anda dapat menentukan metode permintaan HTTP yang berbeda dengan menggunakan ClientHttPRequestFactory.
Antarmuka ClientHTTPRequestFactory terutama menyediakan dua metode implementasi:
RestTemplate menggunakan SimpleClientHttPRequestFactory secara default, dan secara internal memanggil httpConnection untuk memanggil JDK. Batas waktu default adalah -1. Kita dapat mendefinisikan waktu tunggu sendiri.
SimpleClientHttPRequestFactory factory = new SimpleClientHtTpRequestFactory (); // Atur timeout koneksi, unit milidond factory. Resttemplate restTemplate = resttemplate baru (pabrik);
Gunakan Permintaan Dapatkan:
String url = "http: // localhost: 80/mandy/login.json? Akun = 123456 & kata sandi = 123456"; result res = resttemplate.getForObject (url, result.class);
Kode Sumber RestTemplate:
@Override public <t> t getForObject (string url, class <t> responseType, objek ... urlvariable) melempar restclientException {requestCallback requestCallback = acceptheaderRequestCallback (responseType); HttpMessageConVerTerExtractor <T> ResponseExtractor = baru httpmessageConVerTerExtractor <T> (responseType, getMessageConVerters (), logger); return execute (url, httpmethod.get, requestCallback, responseExtractor, urlvariable); }Yang terbaik adalah menggunakan permintaan GET untuk menyambungkan parameter langsung ke alamat. Saya tidak tahu mengapa. Jika Anda menggunakan parameter ketiga, bahkan tipe multivaluemap tidak akan berfungsi (beberapa orang di internet mengatakan bahwa menggunakan jenis multivaluemap tidak apa -apa, tetapi saya mencobanya tetapi tidak akan berhasil)
Gunakan permintaan pos:
HashMap <String, Object> Map = HashMap baru <String, Object> (); peta.put ("name", "test"); peta.put ("akun", "qwer"); peta.put ("kata sandi", "qwer"); ObjectMapper mapper = new ObjectMapper (); String jsonstr = null; coba {jsonstr = mapper.writevalueAsstring (peta); } catch (Exception e) {E.PrintStackTrace (); } // Buat entitas header http dan isi informasi header, seperti format data httpheaders httpheaders = httpheaders baru (); httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);//Create HTTP entity, you can directly use the constructor to put the request body and the request header in HttpEntity<String> httpEntity = new HttpEntity<String>(jsonStr2, httpHeaders);String url = "http: // localhost: 80/mandy/user_enable.json"; // Memanggil metode untuk meminta result res2 = resttemplate.postforObject (url, httpentity, result.class);Kode Sumber RestTemplate:
@Override public <t> t PostForObject (String URL, Permintaan Objek, Kelas <T> ResponseType, Object ... Urivariable) Melempar RestClientException {RequestCallback RequestCallback = httpentityCallback (Request, ResponseType); HttpMessageConVerTerExtractor <T> ResponseExtractor = baru httpmessageConVerTerExtractor <T> (responseType, getMessageConVerters (), logger); return execute (url, httpmethod.post, requestCallback, responseExtractor, Urivariables); }Gunakan Permintaan Put:
HashMap <String, Object> MAP = HashMap baru <String, Object> (); map.put ("user_id", "1"); peta.put ("Enable", 0); ObjectMapper mapper = new ObjectMapper (); string jsonstr = null; coba {jsonstr = mapper.writevalUeasString (peta); null; e.printStackTrace();}//Create HTTP header entity and fill in header information, such as data format HttpHeaders httpHeaders = new HttpHeaders();httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8);//Create HTTP entity, you can directly use the constructor to put the request body and request header in Httpentity <string> httpentity = httpentity baru <string> (jsonstr, httpheaders); String url = "http: // localhost: 80/mandy/user_enable.json"; resttemplate.put (url, httpentity);Kode Sumber RestTemplate:
@Override public void put (string url, permintaan objek, objek ... urlvariable) melempar restclientException {requestCallback requestCallback = httpentitycallback (request); Execute (url, httpmethod.put, requestCallback, null, urlvariables); }Kerugian kecil dari metode ini adalah bahwa tidak ada nilai pengembalian dari hasil permintaan. Jika Anda perlu menggunakan nilai pengembalian, Anda tidak dapat menggunakan metode ini.
Jika Anda ingin menggunakan Permintaan Jenis Hapus, hanya ada parameter berikut di kolom parameter dari metode put resttemplate
@Overridepublic void delete (string url, objek ... urlvariable) melempar restclientException {execute (url, httpmethod.delete, null, null, urlvariables);}@overridepublic void delete (string url, peta <string,? Httpmethod.delete, null, null, urlvariable);}@overridepublic void delete (URI url) melempar restclientException {execute (url, httpmethod.delete, null, null);}Metode -metode ini tidak memberi kita parameter dan membiarkan kami meletakkan konten badan permintaan, jadi jika Anda ingin menggunakan metode hapus yang disediakan oleh resttemplate secara langsung, antarmuka harus menggunakan gaya REST, letakkan parameter di alamat, dan dapatkan parameter melalui anotasi @pathvariable (value = "").
Poin Kunci: Faktanya, kita dapat secara langsung menggunakan metode pertukaran resttemplate, sebagai berikut
@OverridEpublic <T> ResponEntity <T> Exchange (string URL, metode httpmethod, httpentity <?> Permintaan, kelas <T> ResponseType, Object ... Urivariables) melempar responsEnception {requestCallback; ResponseExtractor <responseEntity <T>> ResponseExtractor = ResponEntityExtractor (ResponseType); Return Execute (URL, Metode, RequestCallback, ResponseExtractor, Urivariables);}Di sini kami hanya mencantumkan satu metode. Yang lain dapat ditemukan dalam kode sumber. Metode ini dapat membuat semua jenis permintaan.
Dalam metode ini, parameter metode dapat diperoleh melalui enumerasi HTTPMethod. Parameter permintaan adalah entitas httpentity yang dienkapsulasi dengan sendirinya, termasuk badan permintaan dan header permintaan. Parameter responsetype adalah kelas pemetaan yang mengembalikan hasilnya. Parameter Urivariable memberi saya kesan bahwa itu tidak berguna (pendapat pribadi). Akses ke antarmuka pengembalian permintaan dapat diperoleh melalui metode GetBody () dari nilai pengembalian metode.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.