<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 RESTFul 應用 > 原文: [http://zetcode.com/articles/springbootrestsimple/](http://zetcode.com/articles/springbootrestsimple/) 在本教程中,我們將創建一個簡單的 Spring Boot RESTful 應用。 我們的應用將部署在嵌入式 Tomcat 服務器上。 我們展示了如何從 Web 服務中以 JSON 和 XML 格式返回數據。 ## Spring Boot Spring 是用于創建企業應用的流行 Java 應用框架。 Spring Boot 是一種以最少的精力創建獨立的,基于生產級別的基于 Spring 的應用的方法。 ## RESTFul 應用 RESTFul 應用創建遵循 REST 架構樣式的系統(API),該系統用于設計聯網應用。 RESTful 應用使用 HTTP 請求對資源執行 CRUD(創建/讀取/更新/刪除)操作。 ## Spring Boot RESTFul 簡單示例 以下代碼示例創建一個 Web 服務,該服務從 CSV 文件讀取數據并將其以 JSON 格式返回給客戶端。 ```java $ tree . ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── zetcode │ │ ├── Application.java │ │ ├── bean │ │ │ └── Country.java │ │ ├── controller │ │ │ └── MyController.java │ │ └── service │ │ ├── CountryService.java │ │ └── ICountryService.java │ └── resources │ ├── application.yml │ └── countries.csv └── test └── java ``` 這是項目結構。 `pom.xml` ```java <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zetcode</groupId> <artifactId>SpringBootRest</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>SpringBootRest</name> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.3.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>3.8</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` 這是 Maven 構建文件。 `opencsv`用于處理 CSV 數據。 `spring-boot-starter-web`是用于構建 Web 和 RESTful 應用的入門工具。 該應用打包到可執行的 JAR 文件中。 可執行 JAR 是使用`spring-boot-maven-plugin`創建的。 `application.yml` ```java server: port: 8086 contextPath: /rest ``` `application.yml`文件包含 Spring Boot 應用的各種配置設置。 我們具有服務器端口和上下文路徑(應用名稱)的映射。 該文件位于`src/main/resources`目錄中。 `countries.csv` ```java Country, Population Slovakia,5429000 Norway,5271000 Croatia,4225000 Russia,143439000 Mexico,122273000 Vietnam,95261000 Sweden,9967000 Iceland,337600 Israel,8622000 Hungary,9830000 Germany,82175700 Japan,126650000 ``` `src/main/resources`目錄中的`countries.csv`包含我們的應用中使用的數據。 `Country.java` ```java package com.zetcode.bean; public class Country { private String name; private int population; public Country() { } public Country(String name, int population) { this.name = name; this.population = population; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } } ``` `countries.csv`文件中的字段映射到`Country`類。 `ICountryService.java` ```java package com.zetcode.service; import com.zetcode.bean.Country; import java.util.ArrayList; public interface ICountryService { public ArrayList<Country> findAll(); } ``` 這是`ICountryService`接口。 它包含一種稱為`findAll()`的方法。 `CountryService.java` ```java package com.zetcode.service; import com.opencsv.CSVReader; import com.zetcode.bean.Country; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.stereotype.Service; @Service public class CountryService implements ICountryService { private final ArrayList<Country> countries; public CountryService() { countries = new ArrayList(); } @Override public ArrayList<Country> findAll() { FileInputStream fis = null; try { String fileName = "src/main/resources/countries.csv"; fis = new FileInputStream(new File(fileName)); CSVReader reader = new CSVReader(new InputStreamReader(fis)); String[] nextLine; reader.readNext(); while ((nextLine = reader.readNext()) != null) { Country newCountry = new Country(nextLine[0], Integer.valueOf(nextLine[1])); countries.add(newCountry); } } catch (FileNotFoundException ex) { Logger.getLogger(CountryService.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(CountryService.class.getName()).log(Level.SEVERE, null, ex); } finally { try { if (fis != null) { fis.close(); } } catch (IOException ex) { Logger.getLogger(CountryService.class.getName()).log(Level.SEVERE, null, ex); } } return countries; } } ``` 這是`ICountryService`契約的執行。 它包含`findAll()`方法,該方法從`countries.csv`文件中讀取數據并返回`Country`對象的列表。 `MyController.java` ```java package com.zetcode.controller; import com.zetcode.bean.Country; import com.zetcode.service.ICountryService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private ICountryService countryService; @RequestMapping("/countries") public List<Country> listCountries() { return countryService.findAll(); } } ``` 這是 Spring Boot RESTful 應用的控制器類。 `@RestController`注解創建一個 RESTful 控制器。 傳統的 MVC 控制器使用`ModelAndView`,而 RESTful 控制器僅返回對象,并且對象數據以 JSON 或 XML 格式直接寫入 HTTP 響應。 ```java @Autowired private ICountryService countryService; ``` 我們將`CountryService`注入`countryService`變量中。 ```java @RequestMapping("/countries") public List<Country> listCountries() { return countryService.findAll(); } ``` `@RequestMapping`注解用于將 Web 請求映射到 Spring 控制器方法。 在這里,我們將具有`/countries`路徑的請求映射到控制器的`listCountries()`方法。 默認請求是 GET 請求。 我們不需要手動將`Country`域對象轉換為 JSON。 因為 Jackson 2 在類路徑上,所以 Spring 自動選擇`MappingJackson2HttpMessageConverter`將`Country`實例轉換為 JSON。 `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 應用。 `@SpringBootApplication`啟用自動配置和組件掃描。 ```java $ mvn package ``` 使用`mvn package`命令,構建應用。 ```java $ mvn spring-boot:run ``` 使用`mvn spring-boot:run`命令,運行應用。 該應用部署在嵌入式 Tomcat 服務器上。 ```java $ curl localhost:8086/rest/countries [{"name":"Slovakia","population":5429000},{"name":"Norway","population":5271000}, {"name":"Croatia","population":4225000},{"name":"Russia","population":143439000}, {"name":"Mexico","population":122273000},{"name":"Vietnam","population":95261000}, {"name":"Sweden","population":9967000},{"name":"Iceland","population":337600}, {"name":"Israel","population":8622000},{"name":"Hungary","population":9830000}, {"name":"Germany","population":82175700},{"name":"Japan","population":126650000}] ``` 使用`curl`命令,測試應用。 ## 返回 XML 數據 要返回 XML 數據而不是 JSON,我們需要添加一個依賴項并修改控制器。 ```java <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> </dependency> ``` 我們將`jackson-dataformat-xml`添加到依賴項。 `MyController.java` ```java package com.zetcode.controller; import com.zetcode.bean.Country; import com.zetcode.service.ICountryService; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private ICountryService countryService; @RequestMapping(value="/countries", method=RequestMethod.GET, produces=MediaType.APPLICATION_XML_VALUE) public List<Country> listCountries() { return countryService.findAll(); } } ``` 我們選擇`MediaType.APPLICATION_XML_VALUE`類型來告訴控制器返回 XML 數據。 在本教程中,我們創建了一個 Spring Boot RESTful 應用,該應用以 JSON 和 XML 返回數據。 您可能也對相關教程感興趣: [Spring Boot H2 REST 教程](/articles/springbootresth2/), [Spring Web 應用簡介](/articles/springwebfirst/),[獨立的 Spring 應用](/articles/standalonespring/), [OpenCSV 教程](/articles/opencsv/) ,[在經典的 Spring 應用中使用 HikariCP 連接池](/articles/hikaricp/),[`JdbcTemplate`](/articles/springjdbctemplate/)。
                  <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>

                              哎呀哎呀视频在线观看