Напишите впереди
Эта статья написана в формате Markdown. Это первый раз, когда я написал это. Макет может быть немного грязным, и я надеюсь, что вы можете его простить.
В основном он пишет, которые используют ленту для выполнения Restful запросов, проверяют использование различных методов, код относительно избыточен, что более подходит для начинающих, поэтому я возражаю, даю ему сквирт. Спасибо.
предпосылка
ПРИМЕЧАНИЕ.
Предложение: каждое приложение для микросервиса имеет свои собственные пружины-буте-мавена-плугин и Maven-Compiler-Plugin и указывает, что компилированная JDK-версия составляет 1,8. Метод спецификации следующим образом: добавьте его в pom.xml
<buld> <blicins> <blicin> <groupid> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-maven-plugin </artifactid> </placin> <plagin> <groupid> org.apache.maven.plugins </Groupid> <ratifactid> maven-compiler </artifactid> <prytifactid> maven-compiler </plugin <source> 1.8 </source> <target> 1.8 </target> </configuration> </plugin> </plugins> </build>
Тестовый проект строительство
Центр регистрации Eureka: Справочный центр регистрации поставщик услуг: поставщик услуг по регистрации справочников
Потребители ленты: обнаружение и потребление справочных услуг
После того, как проект будет создан, не забудьте следовать файлу конфигурации хостов, упомянутого в этих учебных пособиях.
Чтобы предотвратить то же самое в проекте, что мы будем удалять все классы контроллеров (поставщики услуг и потребителей). Далее я инкапсуляю каждый метод покоя в класс для всех, чтобы просмотреть
Получить запрос
GetForentity: этот метод имеет три формы перегрузки, а именно:
ПРИМЕЧАНИЕ. Этот метод возвращает ответный объект обертки <T>, где t является ответом, передаваемым в типе. Если вы хотите получить тип возврата, вам нужно использовать метод GetBody () этого объекта обертки.
GetForObject: Этот метод также имеет три перегруженные формы, которые совпадают с методом GetForentity:
ПРИМЕЧАНИЕ. Тип объекта, возвращаемый этим методом.
Для удобства тестирования тот же пользовательский класс предоставляется в поставщике услуг и потребителе услуг соответственно для удобства тестирования
пакет com.cnblogs.hellxz;/** * pojo для тестирования */public class user {private String name; частный строковый секс; Частный строковый телефон; public user () {} public user (имя строки, строковое секс, строковый телефон) {this.name = name; this.sex = sex; this.phone = телефон; } public String toString () {return "user: {" + "name:" + name + "," + "sex:" + sex + "," + "phone:" + phone + "}"; } public String getName () {return name; } public void setName (string name) {this.name = name; } public String getSex () {return Sex; } public void setsex (строка Sex) {this.sex = sex; } public String getPhone () {return Phone; } public void SetPhone (String Phone) {this.phone = phone; }}Ниже мы создаем GetRequestController у поставщика услуг
пакет com.cnblogs.hellxz; import org.apache.log4j.logger; импорт org.springframework.beans.factory.annotation.autowired; импорт org.springframework.cloud.client.serviceinstance; импорт org.sprramework.cloud.client.discavery. org.springframework.web.bind.annotation.*;/*** @author: hellxz* @description: поставщик услуг* @date: 2018/4/18 11:36*/ @restcontrollerpublic class getRequestController {@autowired Private Client Private Discoverient; // Inject Discovery Client Private Final Logger logger = logger.getLogger (getRequestController.class); /** * Перейти прямой тест */@getmapping (value = "/hello") public String hello () {// Получить экземпляр службы, и функция состоит в том, чтобы отобразить эффект консоли более поздней ServiceInstance serviceInstance = client.getLocalServiceInstance (); logger.info ("/hello host:"+serviceinstance.gethost ()+"service_id:"+serviceInstance.getServiceId ()); вернуть "Привет"; }/** * Тест параметра */@getmapping (value = "/regret/{dd}") public String Greet (@pathvariable string dd) {serviceInStance serviceInstance = client.getLocalServiceInstance (); logger.info ("/hello host:"+serviceinstance.gethost ()+"service_id:"+serviceInstance.getServiceId ()); вернуть "привет"+dd; }/*** Возвращает тестовый объект*/@getmapping ("/user") public user getUser () {serviceInstance serviceInstance = client.getLocalServiceInstance (); logger.info ("/user"+serviceInstance.gethost ()+"порт:"+serviceInstance.getport ()+"serviceInstanceid:"+serviceInstance.getServiceId ()); вернуть нового пользователя ("hellxz", "Male", "123456789"); }/*** Возвращает объект в соответствии с именем, и операция поиска в базе данных смоделирована здесь*/@getMaping ("/user/{name}") public user getUserselect (@pathvarable String name) {serviceInsance serviceInstance = client.getLocalServiceInstance (); logger.info ("/user"+serviceInstance.gethost ()+"порт:"+serviceInstance.getport ()+"serviceInstanceid:"+serviceInstance.getServiceId ()); if (name.isempty ()) {return new user (); } else if (name.equals ("hellxz")) {вернуть новый пользователь ("hellxz", "male", "123456789"); } else {вернуть новый пользователь («случайный пользователь», «мужчина», «987654321»); }}}Далее мы создаем GetRequestController в проекте Service Consumer
пакет com.cnblogs.hellxz; import org.apache.log4j.logger; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.http.respessonty; import org.spramework.web.bind.annotation. org.springframework.web.client.resttemplate; import org.springframework.web.util.uricomponents; импорт org.springframework.web.util.uricomponentsbuilder; imporm.net.net.uri; импорт java.ut.hashmap; import.ut.mor. * @Description: контроллер приложений для потребителей ленты, GET запрос * @Date: 2018/4/16 15:54 */ @RestControllerPublic Class getRequestController {private logger = logger.getLogger (getRequestController.class); @Autowired // Inject resttemplate private resttemplate resttemplate; /** * responseentity <t> getForentity (String URL, класс <t> responseType) * t getBody () Следующий метод одинаковый */@GetMaping (value = "/entity/noparam") открытая строка noparamgetfortority () {// прокомментировал здесь, потому что я вышел из этого, потому что я использовал интерфейс, что не будет возвращено, что не будет возвращено, что не будет возвращено, что. Сообщается // return resttemplate.getForentity ("http: // localhost: 8080/hello", string.class) .getbody (); // Использование RestTemplate, чтобы вызвать интерфейс MicroService return resttemplate.getForentity ("http: // hello-service/hello", string.class) .getbody (); }/** * responseentity <t> getForentity (String URL, класс <t> responseType, Object ... urivariables) */@getMaping ("/entity/type") Общественный пользователь GetForentityIfyBype () {// Возвращает результат указанного типа без передачи параметра. resttemplate.getForentity ("http: // hello-service/user", user.class); Body = entity.getbody (); logger.info ("user:"+body); возвращение тела; // вышеуказанное может быть сокращено как // return resttemplate.getForentity ("http: // hello-service/user", user.class) .getbody (); }/** * responseentity <t> GetForentity (String URL, класс <t> responseType, Object ... urivariables) * Используйте заполнители для замены параметров и используйте метод String.format внутренне для реализации */@getmapping (value = "/entity") //, если полученный параметр используется без использования его? Если это так, используйте @pathvariable, в противном случае используйте @RequestParam public String getForentityByquestionMarkparam (@requestparam ("name") string name) {// Основной тестирование метода GetEntity, здесь тест напрямую передает параметр returntemplate.getForentity ("http: // hello-service/greet/{1 atmy.gress.gree.gree.gree.greeforty (" http: // hello-service/greet/{1 atemporty. }/*** Метод GetForentity извлекает карту внутри страны, а значение ключа -заполнителя заполняется в URL как параметр* repplyentity <t> getForentity (строка URL, класс <t> respenceType, map <string,?> Urivariables)*/@getmapp @PathVariable, иначе используйте @RequestParam public String getForentityBymap (@pathvariable ("name") String name) {// Основные тесты метода getEntity, здесь тестирует карту параметров карты <string, string> reqmap = new hashmap (); reqmap.put ("name", name); return resttemplate.getForentity ("http: // hello-service/greet/{name}", string.class, reqmap) .getbody (); }/** * responseentity <t> getForObject (url url, class <t> responseType) */@getMaping ("/entity/uri") public String getForentityByuri () {// Использование URI для передачи аргументов и доступа Uricomponents Uricomponents = Uricomponentsbuilder.fromuristring ("http: // hello-service/greet/{name}") .build (). Expand ("lazhang") .encode (); Uri uri = uricomponents.touri (); return resttemplate.getForentity (uri, string.class) .getbody (); }/** * t getForObject (string url, class <t> responseType) */@getMapping ("/object") public user getForObjectWithNoparam () {// по сравнению с методом GetForentity, получение объекта может пропустить вызов getBody resttemplate.getForObject ("http: // chello-service/uster", uster. }/** * t getForObject (string url, class <t> responseType, map <string,?> Urivariables) */@getMaping ("/object/map") Общедоступный пользователь getForObjectBymap () {// Использовать карту для передачи карты параметров <строка, строка> parammap = new hashmap <> (); parammap.put ("имя", "hellxz"); return resttemplate.getForObject ("http: // hello-service/user", user.class, parammap); }/** * t getForObject (string url, class <t> responsetype, object ... urivariables) */@getmaping ("/object/param/{name}") public user getForObjectByparam (@pathvariable String name) {return resttemplate.getforObject ("http: // hello-service/asmer/{antemplate. }/** * t getForObject (url url, class <t> responseType) */@getMaping ("/object/uri/{name}") public user getForObjectByuri (@pathvariable String nam .build (). Expand (name) .encode (); Uri uri = uricomponents.touri (); return resttemplate.getForObject (uri, user.class); }}Сначала запустите регистрационный центр, а затем протестируйте его, получив доступ к интерфейсу, предоставляемому потребителем. Все они на самом деле управляются мной, поэтому я не буду писать тест здесь.
Опубликовать запрос
Как Prop -запрос, так и запрос GET имеют *ForEntity и *ForObject Method, где список параметров несколько отличается. В дополнение к этим двум методам, существует также метод постфорлокации, где постфорлокация подчиняется ресурсу в качестве запроса POST и возвращает URI нового ресурса.
Постформость: существует три перегруженных формы этого метода, а именно:
ПРИМЕЧАНИЕ. Этот метод возвращает ответный объект обертки <T>, где t является ответом, передаваемым в типе. Если вы хотите получить тип возврата, вам нужно использовать метод GetBody () этого объекта обертки.
PostforObject: этот метод также имеет три формы перегрузки, что совпадает с методом постфортластности:
ПРИМЕЧАНИЕ. Тип объекта, возвращаемый этим методом.
Постфорлокация: в этом методе также есть три формы перегрузки, а именно:
Примечание. Этот метод возвращает URI нового ресурса. Разница между методами GetForentity, GetForObject, Postfortentity и PostForObject заключается в том, что нет необходимости указывать тип возврата в этом методе, поскольку тип возврата является URI. Это по -прежнему требует, чтобы заполнитель проходил аргументы через объект ... Urivariables, Map <String,?> Urivariables. Смотрите часть постформы кода.
В предыдущем способе мы создали PostrequestControllers в проектах, которые предоставляют поставщикам услуг и потребителям соответственно.
Следующий сервис PostrequestController Code заключается в следующем:
пакет com.shunneng.springcloudhelloworld; import org.apache.log4j.logger; import org.springframework.web.bind.nantation.*; import org.springframework.web.util.uricomponents; импорт org.spramework.web.util.uricomponponsbuldents; java.net.uri;/** * @author: hellxz * @description: * @date: 2018/4/18 10:21 */ @restcontrollerpublic class postrequestcontroller {private logger = logger.getlogger (postequestcontroller.class); /*** Получите объект и верните его обратно. Метод Postforentity/postforObject является общим*/@postmapping ("/user") public user returnUserBypost (@Requestbody пользователь пользователя) {logger.info ("/use interface"+user); if (user == null) вернуть нового пользователя («Это пустой объект», «», «»); вернуть пользователь; }/** * Проверьте параметры метода Postforentity, вы можете напрямую судить об выводе */@postmapping ("/user/{str}") public returnUserBypost (@pathvarible String Str, @requestbody пользователь пользователя) {пользователь logger.info ("/user/comeparam inement name:"+str+""+user); if (user == null) вернуть нового пользователя («Это пустой объект», «», «»); вернуть пользователь; }/** * Возврат URI для метода Postforlocation */@postmapping ("/location") public uri returnuri (@Requestbody пользователь пользователя) {// Моделируя URL здесь, место реального ресурса не может быть здесь Uricomponents Uricomponents = uricomponentsbuilder.fromuristring ("http: // hello-service/location") .build (). Expand (пользователь) .encode (); Uri touri = uricomponents.touri (); // Я не знаю, в чем проблема. Это очевидно сгенерировано, но кажется, что logger.info ("/location uri:"+touri); вернуть тури; }}Потребительский код PostrequestController:
пакет com.cnblogs.hellxz; import org.apache.log4j.logger; import org.springframework.beans.factory.annotation.autowired; import org.springframework.http.respestontytonty; import org.spramework.web.nannotation.prostmappensity; org.springframework.web.bind.annotation.restcontroller; import org.springframework.web.client.resttemplate; импорт org.springframework.web.util.uricomomponents; org.sprimework.web.util.uricomponentsbuilder; : Hellxz * @description: ленточный потребительский запрос Controller * @date: 2018/4/18 9:47 */ @ @restcontrollerpublic class postrequestcontroller {private logger = logger.getlogger (postrequestcontroller.class); @Autowired private resttemplate resttemplate; /** * responseentity <t> postforentity (строка URL, запрос объекта, класс <t> rassiontype) * URL параметра не упоминается. Если запрос объекта не является объектом Httpentity, он будет автоматически преобразован в объект HTTPentity и рассматривается как полное тело; * Если это объект Httpentity, он будет обрабатываться непосредственно как тело и содержит содержание заголовка. * Я не буду говорить о методе переписывания ниже. Метод использования примерно такой же, как и GetForentity. Если это просто простой объект Post, то используйте метод без объекта ... переменные или переменные карты. * postforentity (строковый URL, запрос объекта, класс <t> respenseType, Object ... urivariables) * postforentity (строковый URL, запрос объекта, класс <t> respenceType, map <string,?> Urivariables) * * Здесь мы поговорим о подводных камнях, которые я столкнулся в подробности: То есть используйте заполнители для передачи параметров в URL -адресе, запрашиваемом Post, и если в URL -адреса не используются заполнители, то эти последние прошлые параметры недействительны! * 2. Если объект запроса объекта в методе имеет тот же тип, что и параметр принимающего поставщика услуг, поставщику услуг должен использовать только @Requestbody для получения параметров. * 3. Если оба используются, это более интересно. Вам необходимо получить параметры в URI через аннотацию @pathvariable, и вам также нужно @requestbody, чтобы получить объекты или requestparam для получения параметров в соответствии с полями! * 4. Если вы сообщите об ошибке, пожалуйста, посмотрите на три пункта, которые я написал выше, и обратите внимание на использование параметров и аннотаций поставщика услуг. */ @Postmapping ("/ entity") public user postforentity () {user user = новый пользователь ("hellxz1", "1", "678912345"); Responseentity <user> entity = resttemplate.postforentity ("http: // hello-service/user/{str}", user, user.class, "Параметры теста"); Body = entity.getbody (); // Все Resttemplate.*Методы формирования - это классы обертки, а тело - это корпус возвращаемого объекта возвращаемого типа; }/*** Передача параметров с URI, результаты тестирования будут отображаться в терминале поставщика услуг* Replessentity <t> postfortentity (URI URL, запрос объекта, класс <T> responseType)*/@postmapping ("/entity/uri") Общественный пользователь Postforentitybyuri () {пользователь = новый пользователь ("lao/uri") Чжан "," 1 "," 678912345 "); // Здесь мы просто конвертируем URL в URI, и нет параметров, добавленного Uricomponents Uricomponents = uricomponentsbuilder.fromuristring ("http: // hello-service/user") .build (). Encode (); Uri touri = uricomponents.touri (); // Использование пользователя для передачи параметра user object = resttemplate.postforObject (touri, user, user.class); вернуть объект; } /*** При тестировании метода PostForObject здесь параметры, на которые необходимо обратить внимание, являются описанными в приведенном выше методе. Разница в том, что вам не нужно Get Fody, поэтому я не буду подробно останавливаться здесь * PostforObject (строки URL, запрос объекта, класс <t> rassetype, Object ... urivariables) * postforObject (строковый URL, запрос объекта, класс <t> respenseType, объект ... urivariables) * postforObject (строка URL, запрос объекта, класс <T> respenceType, map <string? @Postmapping ("/object") public user postforobject () {user user = новый пользователь ("hellxz2", "1", "123654987"); // здесь URL-адрес пропускает 1, чтобы вызвать интерфейс в сервере проекта, пользователь, responsebody = resttemplate.postforobject ("http: // hello-service/user/1", user, user.class); возвратный ответ; } /*** Существует другой тип запроса поста: postforlocation. Здесь также есть три перегрузки. В дополнение к тому, чтобы не указать тип возврата, использование одинаково, а тип возврата - это все URI, поэтому я не буду описывать его * postforlocation (строковый URL, запрос объекта, объект ... urivariables) * postforlocation (url url, запрос объекта, карта <string,?> Urivariables) * postforlocation (URL url, запрос объекта) * @postmapping ("/ location) * postforlocation (url url (urse -recement) * @postmapping ("/ location) (") * uspostmapping ("/ location) (") * uspostmapping ("/ location) (")") * @postmapping ("/ location) * posterocation) * новый пользователь ("hellxz3", "1", "987654321"); Uri uri = resttemplate.postforlocation («http: // hello-service/location», пользователь); // Я не знаю, почему это пусто. Этот метод предназначен только для справки. Если я знаю, в чем заключается ситуация, я вернусь, чтобы изменить logger.info ("/location uri:"+uri); вернуть URI; }}Поместить запрос и удалить запрос
Запрос POT проще, чем методы запроса GET и POST. Нет необходимости указывать тип возврата запроса POT, и, конечно, нет возврата. Это также три типа перегрузки, которые в основном такие же, как и те, которые написаны ранее. Я не хочу здесь говорить больше. И запрос DELETE, и запрос PUT не имеют возврата. Неважно, напишете ли вы это специально здесь. Методы этих двух запросов перечислены отдельно. Код написан в классе.
Метод запроса POT заключается в следующем:
Метод запроса удаления следующим образом:
Добавить PutandDeleteRequestController в проект поставщика, код заключается в следующем
package com.cnblogs.hellxz;import org.apache.log4j.Logger;import org.springframework.web.bind.annotation.*;/** * @Author : Hellxz * @Description: Service provider put&delete request controller * @Date : 2018/4/19 14:11 */@RestControllerpublic class PutAndDeleteRequestController {private logger logger = logger.getLogger (putandDeleteRequestController.class); @Putmapping ("/put") public void put (@requestbody user user) {logger.info ("/put"+user); } @Deletemapping ("/delete/{id}") public void delete (@pathvarable long id) {logger.info ("/delete id:"+id); }}Добавить PutandDeleteRequestController в проект поставщика, код заключается в следующем
пакет com.cnblogs.hellxz; import org.apache.log4j.logger; import org.springframework.beans.factory.annotation.autowired; импорт org.springframework.web.bindation.annotation.*; импорт org.spramework.web.lest.restteplate @Description: Поместить запрос, запрос удаления, перегруженные параметры в основном такие же, как и приведенная выше демонстрация, и не будет перечислены * @date: 2018/4/19 13:43 */ @restcontrollerpublic class putrequestcontroller {private logger = logger.getlogger (postequestcontroller.class); @Autowired private resttemplate resttemplate; /*** Пример запроса положить, как правило, запросы в основном используются в качестве модификации*/@putmapping ("/put") public void put (@requestbody пользователь пользователя) {resttemplate.put ("http: // hello-service/put", user); }/*** Пример удаления запроса*/@deletemapping ("/del/{id}") public void delete (@pathvariable long id) {resttemplate.delete ("http: // hello-service/delete/{1}", id); }}Заключение
Этот пост написан с использованием Marckdown. Я не знаю, как добавить последовательные номера и складывать функции кода в кодовый блок в первый раз. Возможно, это не хорошая статья, но я писал этот пост в блоге почти два дня. Если у вас есть хорошие предложения, пожалуйста, не стесняйтесь комментировать и обмениваться.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.