<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring Boot `RestTemplate` > 原文: [http://zetcode.com/springboot/resttemplate/](http://zetcode.com/springboot/resttemplate/) Spring Boot `RestTemplate`教程展示了如何在 Spring 應用中使用`RestTemplate`創建同步 HTTP 請求。 Spring 是流行的 Java 應用框架,而 Spring Boot 是 Spring 的演進,可以幫助輕松地創建獨立的,生產級的基于 Spring 的應用。 ## `RestTemplate` `RestTemplate`是執行 HTTP 請求的同步客戶端。 它在基礎 HTTP 客戶端庫(例如 JDK `HttpURLConnection`,Apache HttpComponents 等)上使用簡單的模板方法 API。 從 Spring 5.0 開始,可以使用新客戶端`WebClient`創建同步和異步請求。 在將來的版本中,將不推薦使用`RestTemplate`,而推薦使用`WebClient`。 ## Spring Boot `RestTemplate` 示例 在以下應用中,我們創建一個自定義測試服務器,該服務器生成 JSON 數據,并使用`RestTemplate`生成 HTTP 請求并使用返回的 JSON 數據。 ## 創建 JSON 服務器 為此,我們使用 Node 創建一個 JSON 測試服務器。 ```java $ node --version v11.2.0 ``` 我們顯示 Node 的版本。 ```java $ npm init $ npm i -g json-server $ npm i faker fs ``` 我們初始化 Node 項目并安裝`json-server`,`faker`和`fs`模塊。 `json-server`用于創建測試 JSON 服務器,`faker`用于生成測試數據,`fs`用于 JavaScript 中的文件系統。 `generate_fake_users.js` ```java const faker = require('faker') const fs = require('fs') function generateUsers() { let users = [] for (let id=1; id <= 100; id++) { let firstName = faker.name.firstName() let lastName = faker.name.lastName() let email = faker.internet.email() users.push({ "id": id, "first_name": firstName, "last_name": lastName, "email": email }) } return { "users": users } } let dataObj = generateUsers(); fs.writeFileSync('data.json', JSON.stringify(dataObj, null, '\t')); ``` 使用仿造者,我們可以生成具有 ID,名字,姓氏和電子郵件屬性的一百個用戶。 數據被寫入`data.json`文件。 該文件由`json-server`使用。 ```java $ node generate_fake_users.js ``` 我們產生了一百個假用戶。 ```java $ json-server --watch data.json \{^_^}/ hi! Loading data.json Done Resources http://localhost:3000/users Home http://localhost:3000 ``` 我們開始`json-server`。 現在,我們可以向`http://localhost:3000/users`資源創建一個請求,以使用 JSON 獲得一百個用戶。 ## Spring Boot 應用 我們創建一個 Spring Boot 應用。 我們需要以下 Maven 依賴項和插件:`spring-boot-starter`,`spring-web`,`jackson-databind`,`spring-boot-starter-test`和`spring-boot-maven-plugin`。 `application.properties` ```java spring.main.banner-mode=off logging.level.root=INFO logging.pattern.console=%d{dd-MM-yyyy HH:mm:ss} %magenta([%thread]) %highlight(%-5level) %logger.%M - %msg%n myrest.url=http://localhost:3000/users ``` `application.properties`是 Spring Boot 中的主要配置文件。 我們關閉 Spring 橫幅,將日志記錄級別設置為 info,并設置控制臺日志記錄模式。 我們還設置了一個指向用戶資源的 URL 屬性。 稍后將使用`@Value`檢索該屬性。 `User.java` ```java package com.zetcode.bean; import com.fasterxml.jackson.annotation.JsonProperty; public class User { private int id; private String firstName; private String lastName; private String email; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } @JsonProperty("first_name") public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } @JsonProperty("last_name") public void setLastName(String lastName) { this.lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { final var sb = new StringBuilder("User{"); sb.append("id=").append(id); sb.append(", firstName='").append(firstName).append('\''); sb.append(", lastName='").append(lastName).append('\''); sb.append(", email='").append(email).append('\''); sb.append('}'); return sb.toString(); } } ``` `User` bean 映射到 JSON 用戶對象。 Spring 使用 Jackson 庫將 JSON 數據綁定到 Java 類。 由于 JSON 屬性與 Java 屬性不匹配,因此我們使用`@JsonProperty`來解決此問題。 `AppConfig.java` ```java package com.zetcode.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; @Configuration public class AppConfig { @Bean public RestTemplate restTemplate() { var factory = new SimpleClientHttpRequestFactory(); factory.setConnectTimeout(3000); factory.setReadTimeout(3000); return new RestTemplate(factory); } } ``` 我們創建一個配置 bean。 設置`RestTemplate`。 `SimpleClientHttpRequestFactory`用于設置連接和讀取超時。 `AppConfig.java` ```java package com.zetcode.config; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; import java.time.Duration; @Configuration public class AppConfig { @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder .setConnectTimeout(Duration.ofMillis(3000)) .setReadTimeout(Duration.ofMillis(3000)) .build(); } } ``` 或者,我們可以使用`RestTemplateBuilder`來完成這項工作。 `MyRestService.java` ```java package com.zetcode.service; import com.zetcode.bean.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @Service public class MyRestService { @Autowired private RestTemplate myRestTemplate; @Value("${myrest.url}") private String restUrl; public User[] getUsers() { var users = myRestTemplate.getForObject(restUrl, User[].class); return users; } } ``` `MyRestService`是生成 HTTP 請求的服務類。 它從 JSON 測試服務器獲取所有用戶。 ```java @Autowired private RestTemplate myRestTemplate; ``` 我們注入了`RestTemplate` bean。 ```java @Value("${myrest.url}") private String restUrl; ``` 從配置中,我們使用`@Value`注解獲取 URL。 ```java var users = myRestTemplate.getForObject(restUrl, User[].class); ``` 我們使用`getForObject()`方法生成請求。 由于我們期望對象數組,因此我們使用`User[].class`語法。 `MyRunner.java` ```java package com.zetcode; import com.zetcode.service.MyRestService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import java.util.Arrays; @Component public class MyRunner implements CommandLineRunner { private static final Logger logger = LoggerFactory.getLogger(MyRunner.class); @Autowired private MyRestService myRestService; @Override public void run(String... args) throws Exception { var users = myRestService.getUsers(); Arrays.stream(users).limit(10).forEach(todo -> logger.info("{}", todo)); } } ``` `MyRunner`使用`MyRestService`獲取用戶。 我們向控制臺顯示前十個用戶。 `Application.java` ```java package com.zetcode; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` `Application`是設置 Spring Boot 應用的入口。 `ApplicationTests.java` ```java package com.zetcode; import com.zetcode.config.AppConfig; import com.zetcode.service.MyRestService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.client.RestClientTest; import org.springframework.test.context.junit4.SpringRunner; import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) @RestClientTest(value={MyRestService.class, AppConfig.class}) public class ApplicationTests { @Autowired private MyRestService service; @Test public void usersNotEmpty() throws Exception { var users = this.service.getUsers(); assertThat(users).isNotEmpty(); } @Test public void hasSizeOneHundred() throws Exception { var users = this.service.getUsers(); assertThat(users).hasSize(100); System.out.println(users); } } ``` 我們測試`getUsers()`服務方法。 我們測試 JSON 數據不為空,并且包含一百個元素。 ```java @RestClientTest(value={MyRestService.class, AppConfig.class}) ``` `@RestClientTest`注解用于測試 Spring rest 客戶端。 它禁用完全自動配置,并且僅應用與其余客戶端測試相關的配置。 ```java $ mvn -q spring-boot:run ... 27-11-2018 15:33:55 [main] INFO com.zetcode.MyRunner.lambda$run$0 - User{id=1, firstName='Ofelia', lastName='Hintz', email='Gustave.Von43@yahoo.com'} 27-11-2018 15:33:55 [main] INFO com.zetcode.MyRunner.lambda$run$0 - User{id=2, firstName='Brian', lastName='Marvin', email='Marina.Shields@hotmail.com'} 27-11-2018 15:33:55 [main] INFO com.zetcode.MyRunner.lambda$run$0 - User{id=3, firstName='Adah', lastName='Marquardt', email='Osbaldo_Halvorson55@hotmail.com'} 27-11-2018 15:33:55 [main] INFO com.zetcode.MyRunner.lambda$run$0 - User{id=4, firstName='Jaycee', lastName='Kulas', email='Claud85@gmail.com'} ... ``` 我們運行該應用。 在本教程中,我們展示了如何在 Spring 應用中使用`RestTemplate`創建同步請求。 REST 數據來自 Node 創建的測試 JSON 服務器。 您可能也對相關教程感興趣: [Spring Boot `@RestController`教程](/springboot/restcontroller/), [Spring Boot H2 REST 教程](/articles/springbootresth2/), [Spring Boot RESTFul 應用](/articles/springbootrestsimple/), [Spring Boot REST Data JPA 教程](/articles/springbootrestdatajpa/)和 [Java 教程](/lang/java/)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看