Основные понятия
Spring Resttemplate - это клиент, предоставленный весной для доступа к услугам REST. Resttemplate предоставляет множество удобных способов доступа к удаленным услугам HTTP, что может значительно повысить эффективность написания клиента. Поэтому многие клиенты, такие как Android или сторонние поставщики услуг, используют Resttemplate для запроса услуг Restful.
Resttemplata Spring-Web-это инкапсуляция лежащей в основе HTTP Java. Пользователи, использующие Resttemplata, больше не могут обращать внимания на базовое установление подключения. Resttemplata не только поддерживает спецификацию REST, но и определяет тип объекта возвращаемого значения.
При использовании вы можете прямо носить объект Resttemplate. Будут некоторые преобразователи сообщений, которые возвращают сообщения в созданном нами объекте Resttemplate. Вы можете найти соответствующий преобразователь на основе медиатипа возвращаемых данных и выполнить преобразование MediaType. Вы также можете создать конвертер сообщений самостоятельно, создать класс, который наследует класс AbstractGenerichtpmessageConverter <t> или реализует интерфейс httpmessageConverter <T>. Следует отметить, что метод CanRead и метод CanWrite должны быть оценены самостоятельно, написать параметры в поток в методе записи или написать, и получить возвращенный результат от тела потока в методе чтения или метода чтения и типа.
Объект RestTemplate создает HTTP -запросы внизу, используя реализацию в пакете Java.net. Вы можете указать различные методы HTTP -запроса, используя ClientHttpRequestFactory.
Интерфейс ClientHttPrequestFactory в основном предоставляет два метода реализации:
Resttemplate использует SimpleClientHttpRequestFactory по умолчанию и внутренне вызывает httpConnection для вызова JDK. Тайм -аут по умолчанию составляет -1. Мы можем определить тайм -аут сами.
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory (); // Установить время ожидания подключения, Unit Millisecond Factory.setConnecttimeout (5000); // Установите тайм -аут считывания, Unit Millisecond Factory.setReadTimeout (10000); RESTTEMPLATE RESTTEMPLATE = NEW RESTTEMPLATE (FACTORIA);
Используйте запросы на получение:
String url = "http: // localhost: 80/mandy/login.json? Account = 123456 & password = 123456"; result res = resttemplate.getForObject (url, result.class);
Resttemplate исходный код:
@Override public <t> t getForObject (string url, class <t> responseType, объект ... urlvariables) throws restClientException {requestCallback requestCallback = arcomeTeaderRequestCallback (actryType); Httpmessageconverterextractor <t> responseextractor = new httpmessageconverterextractor <t> (actiontype, getmessageconverters (), logger); return execute (url, httpmethod.get, requestcallback, responseextractor, urlvariables); }Лучше всего использовать запрос Get, чтобы разбить параметры непосредственно на адрес. Я не знаю почему. Если вы используете третий параметр, даже тип Multivaluemap не будет работать (некоторые люди в Интернете говорят, что использование типа Multivaluemap - это нормально, но я попробовал это, но это не сработает)
Используйте запрос сообщения:
HashMap <String, Object> Map = new HashMap <String, Object> (); map.put ("name", "test"); map.put ("account", "qwer"); map.put ("пароль", "qwer"); ObjectMapper mapper = new ObjectMapper (); String jsonstr = null; try {jsonstr = mapper.writevalueasString (map); } catch (Exception e) {e.printstackTrace (); } // Создать объект заголовка HTTP и заполнить информацию о заголовке, такую как формат данных httphaders httphaders = new httphaders (); httpheaders.setContentType (mediaType.application_json_utf8); // Создать http -объект, вы можете напрямую использовать конструкцию, чтобы поместить тело запроса и заголовок запроса в httpentity <string> httpentity = new httpentity <string> (jsonster2, httpheaders); "http: // localhost: 80/mandy/user_enable.json"; // вызов метода для запроса результата res2 = resttemplate.postforobject (url, httpentity, result.class);Resttemplate исходный код:
@Override public <t> t postforObject (string url, объект запрос, класс <t> responseType, объект ... urivariables) Throws RestClientException {requestCallback requestCallback = httpentityCallback (request, responsetype); Httpmessageconverterextractor <t> responseextractor = new httpmessageconverterextractor <t> (actiontype, getmessageconverters (), logger); return execute (url, httpmethod.post, requestcallback, responseextractor, 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 {jsonts = mapper.writevalueSstring (map); e.printstacktrace ();} // Создание объекта заголовка HTTP и заполнение информации заголовка, такую как формат данных httphaders httpheaders = new httphaders (); httphaders.setContenttype (MediaType.application_Json_UTF8) Httpentity <string> httpentity = new httpentity <string> (jsonstr, httpheaders); String url = "http: // localhost: 80/mandy/user_enable.json"; resttemplate.put (url, httpentity);Resttemplate исходный код:
@Override public void put (string url, запрос объекта, объект ... urlvariables) Throws RestClientException {requestCallback requestCallback = httpentityCallback (request); execute (url, httpmethod.put, requestcallback, null, urlvariables); }Небольшой недостаток этого метода состоит в том, что нет возвращаемого значения результата запроса. Если вам нужно использовать возвратное значение, вы не можете использовать этот метод.
Если вы хотите использовать запрос типа Delete, в столбце параметров метода Put of Resttemplate есть только следующие параметры.
@OverridePublic void Delete (String URL, объект ... urlvariables) throws restClientException {execute (url, httpmethod.delete, null, null, urlvariables);}@overridepublic void удаляет (строка url, map <строка,?> Urlvariable) phrowsceptexceptexcept Httpmethod.delete, null, null, urlvariables);}@overridepublic void delete (uri url) throws restclientexception {execute (url, httpmethod.delete, null, null);}Эти методы не дают нам параметров, и давайте поместим содержание корпуса запроса, поэтому, если вы хотите использовать метод удаления, предоставленный Resttemplate напрямую, интерфейс должен использовать стиль Restful, поместить параметры в адрес и получить параметры через аннотацию @PathVariable (value = ").
Ключевой момент: Фактически, мы можем напрямую использовать метод обмена Resttemplate, следующим образом
@OverridePublic <t> responseentity <t> Exchange (String url, метод httpmethod, httpentity <?> Запрос, класс <t> responseType, объект ... urivariables) throws restClientException {requestCallback requestCallback = httpentityCallback (recementity, responsetype); ResponseExtractor <responseentity <t>> responseExtractor = responseTityExtractor (responseType); return execute (url, метод, requestcallback, responseextractor, urivariables);}Здесь мы перечислим только один метод. Другие можно найти в исходном коде. Этот метод может сделать все типы запросов.
В этом методе параметр метода может быть получен через перечисление HTTPMethod. Параметром запроса является объектом Httpentity, инкапсулированной самим собой, включая тело запроса и заголовок запроса. Параметр ответа - это класс отображения, который возвращает результат. Параметр Urivariables создает у меня впечатление, что он бесполезен (личное мнение). Доступ к интерфейсу возврата запроса может быть получен с помощью метода getBody () возвращаемого значения метода.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.