В дизайне интерфейса REST, использование RestTemplate для тестирования интерфейса является распространенным методом, но во время использования из -за многочисленных методов и параметров многие студенты путали различия между методами представления формы и подчинением полезной нагрузки. Кроме того, дизайн интерфейса отличается от методов отправки, используемых традиционными браузерами. Часто возникают различные ошибки, такие как 405 ошибок, или представленные данные не могут быть получены вообще. Образцы ошибок следующие:
Исключение в потоке "Main" org.springframework.web.client.httpclienterrorexception: 405 Метод не разрешен
at org.springframework.web.client.defaultresponseerrorhandler.handleerror (defaultresponseerrorhandler.java:63)
at org.springframework.web.client.resttemplate.handleresponse (resttemplate.java:700)
на org.springframework.web.client.resttemplate.doexecute (resttemplate.java:653)
at org.springframework.web.client.resttemplate.execute (resttemplate.java:613)
at org.springframework.web.client.resttemplate.exchange (resttemplate.java:531)
1. Отправить с помощью метода обмена
Exchange может выполнить оба метода публикации, так и полученные, поэтому он наиболее широко используется, и использование следующим образом:
String url = "http: // localhost/mirana-ee/app/login"; resttemplate client = new Resttemplate (); httpheaders headers = new httpheaders (); // Пожалуйста, не изменяйте этот метод. В большинстве случаев, метод отправки - это заголовки подчинения формы. SetContentType (mediaType.application_form_urlencoded); // инкапсуляции параметров, не заменяйте их на карту и Hashmap, в противном случае параметры не могут быть переданы MultivalUemap <String, String> PAMESS = New LinkeDmultiveluemap <String> (string> (); «Имя пользователя»); Params.Add ("пароль", "123456"); httpentity <multivaluemap <string, string >> requestEntity = new httpentity <multivaluemap <string >> (params, заголовки); // executite http reckseentEntity <string> response = respence.exchange (urllypost., htttp explowent reckement. String.class); // Выходные результаты System.out.println (response.getBody ());2. Отправить с постформодностью
Постформость - это упрощение обмена, и требуется только сокращение параметра Httpmethod.post следующим образом:
// Приведенный выше код точно такой же // Вам нужно только заменить метод обмена.
3. О разнице между подчинением формы и подчинением полезной нагрузки
В параметрах метода контроллера, если вы измените «@modelattribute» на аннотацию «@requestbody», метод отправки в настоящее время является методом полезной нагрузки. Пример кода заключается в следующем:
// Обратите внимание, что @Requestbody Annotation @RequestMapping (value = "/login", method = requestMethod.post, ocmpormations = "Application/json") // Никогда не добавляйте @modelattribute, в противном случае он будет перезаписан, как учетная запись @Rectody (@Rectoby sturncome. Дата()); возврат учетной записи;}
Еще раз, не добавляйте снова «@modelattribute», потому что ее приоритет относительно высокий, система будет использовать форму для анализа представленного контента.
Для метода полезной нагрузки представленный контент должен быть строкой, а заголовок должен быть установлен на «Приложение/JSON». Пример заключается в следующем:
// Строка запроса адреса url = "http: // localhost/mirana-ee/app/login"; resttemplate client = new Resttemplate (); // Обязательно установите заголовки Headerhtpheaders = new httpheaders (); Headers.setContenttype (mediaType.application_json_utf8; //septenttype (mediaType.Application_json_utf8; // converttype (mediaType.application_json_utf8); ObjectMapperObjectMapper Mapper через инъекцию bean = new objectmapper (); map <string, string> params = maps.newhashmap (); params.put ("username", "inter"); params.put ("пароль", "123456"); String = mapper.writeValueAsString ("paraper"); Httpentity <string> (значение, заголовки); // Выполнение http -запроса responseentity <string> response = client.postforentity (url, requestEntity, string.class); system.out.println (ourshy.getbody ());Если контент не будет представлен в строковом режиме, определенно появится следующая ошибка:
Исключение в потоке "Main" org.springframework.web.client.httpclienterrorexception: 400 Плохая запрос
at org.springframework.web.client.defaultresponseerrorhandler.handleerror (defaultresponseerrorhandler.java:63)
at org.springframework.web.client.resttemplate.handleresponse (resttemplate.java:700)
на org.springframework.web.client.resttemplate.doexecute (resttemplate.java:653)
at org.springframework.web.client.resttemplate.execute (resttemplate.java:613)
at org.springframework.web.client.resttemplate.postforentity (resttemplate.java:407)
Наконец, следует подчеркнуть, что параметры запроса не могут быть получены через @requestbody. Если код на вышеуказанном сервере изменяется на следующий формат, вы определенно не получите данные, но обратное верно для подчинения формы.
@Requestmapping (value = "/login", consumers = "Application/json", method = requestMethod.post) общедоступная учетная запись getAccount (учетная запись @Requestbody, httpservletrequest) {// Вы не должны получать значение значения параметров. Account.SetVersion (New Date ()); возврат учетной записи;}4. Структура httpentity
Httpentity - это инкапсуляция HTTP -запросов, которая содержит две части, заголовок и тело. Заголовок используется для установки заголовка запроса, а тело используется для установки корпуса запроса, поэтому его конструктор выглядит следующим образом:
// значение - это тело запроса // заголовок - заголовок запроса httpentity <string> requestEntity = new httpentity <string> (значение, заголовки);
5. httpentity и urivariables
При использовании Resttemplate Httpentity используется для прохождения определенных значений параметров, в то время как мочеистерии используются для форматирования HTTP -адреса вместо параметров адреса. Правильное использование следующим образом:
// Добавить параметры форматирования pathString url = "http: // localhost/mirana-ee/app/{path}"; // prepare formatting paramaters map <string, string> varparams = maps.newhashmap (); varparams.put («path», «log»); // другие коды. client.postforentity (url, requestEntity, string.class, varparams);6. Примечания о httpmessageconverter
Во многих примерах в Интернете я обнаружил, что многие люди добавили пользовательские httpmessageconverter для обработки материалов полезной нагрузки, следующим образом:
// нет необходимости в client.getMessageConverters (). Добавить (новый картирование Jackson2httpmessageConverter ()); client.getMessageConverters (). Add (new StringhttpmessageConverter ());
Затем, после того, как я проверил исходный код и отладил, я обнаружил, что Resttemplate имеет встроенные 7 типов HTTPMessageConverters, следующим образом:
1. org.springframework.http.converter.bytearrayhttpmessageConverter
2. org.springframework.http.converter.stringhttpmessageConverter
3. org.springframework.http.converter.resourcehttpmessageConverter
4. org.springframework.http.converter.xml.sourcehttpmessageConverter
5. org.springframework.http.converter.support.allencompassingformhttpmessageConverter
6. org.springframework.http.converter.xml.jaxb2rootelementhttpmessageConverter
7. org.springframework.http.converter.json.mapping Jackson2httpmessageConverter
«`
в заключение
Resttemplate может значительно упростить сложность отправки данных форм и поставляется с функцией автоматического преобразования данных JSON. Однако, только понимая структуру композиции httpentity (заголовок и тело) и понимая различия с мочеиспусканиями, мы можем по -настоящему понять его использование.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.