天天看點

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

Spring Boot簡單介紹

Spring Boot用于建立可運作的、獨立的、生産級的基于Spring的應用程式。Spring Boot對Spring和第三方庫持約定大于配置的觀念,以便可以輕松上手。大多數Spring Boot應用程式隻需要很少的配置。

Spring Boot可以通過使用java -jar或更傳統的war包部署來啟動Java應用程式

Spring Boot的目标是:

  • 為所有Spring開發提供從根本上更快且可廣泛通路的體驗。
  • 開箱即用。
  • 提供一系列大型項目通用的非功能特性(例如嵌入式伺服器、安全性、名額、健康檢查和外部化配置)。
  • 沒有代碼生成,也不需要XML配置。

我們使用Spring Boot的好處:

  • Spring Boot的元件自動裝配,可以讓開發人員專注于核心業務開發。
  • 他的外部化配置,可以讓程式一次建構、按需調配,到處運作。
  • 嵌入式容器,無需部署即可獨立運作
  • Spring Boot Starter簡化了依賴、按需裝配
  • Production-Ready :一站式運維、生态無縫結合,應用程式推送到生産環境時對其進行監視和管理

系統要求

Spring Boot 2.6.2需要Java 8,并且相容Java 17(包括Java 17 ),還需要Spring Framework 5.3.14或更高版本,這裡采用Spring Boot 2.6.2,它是目前最新的正式版。

Spring Boot為以下建構工具提供了顯式建構支援:

  • Maven 3.5+
  • Gradle 6.8.x 6.9.x and 7.x

Servlet 容器

Spring Boot支援如下圖所示的嵌入式Servlet容器:

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

可以将Spring Boot應用程式部署到任何相容Servlet 3.1+的容器。

基本結構

使用Spring Initializr來建構Spring Boot應用,也可以使用Maven建構Spring Boot項目

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

選擇依賴和Spring Boot版本,這裡添加基本的web依賴,來寫一些基礎的web服務。

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

以下是生成的Spring Boot項目,大緻結構如下所示

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

pom.xml 依賴檔案

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xt</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <description>springboot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>      

我們可以檢視maven的依賴檔案

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

這是他的依賴圖,可以自己在IDEA裡面檢視

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

啟動類(SpringbootApplication)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }

}      

@SpringBootApplication是一個友善的注解,它添加了以下所有内容:

  • @Configuration:将類标記為應用程式上下文的bean定義的源。
  • @EnableAutoConfiguration:告訴Spring Boot開始根據類路徑設定、其他bean和各種property設定添加bean。例如,如果spring-webmvc在類路徑上,這個注解将該應用标記為一個web應用程式,并激活關鍵行為,比如設定一個DispatcherServlet。
  • @ComponentScan:告訴Spring在com.xt包中尋找其他元件、配置和服務,讓它找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法來啟動應用程式。您注意到沒有一行XML嗎?也沒有web.xml檔案。這個web應用程式是100%純Java的,你不需要配置任何基礎設定。

點選run運作spring boot,啟動成功,如下圖所示:

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

預設情況下,會顯示INFO日志消息,包括一些相關的啟動細節,比如啟動應用程式的使用者。如果您需要設定除INFO之外的日志級别,請參見日志級别進行設定。應用程式版本是使用來自主應用程式類包的實作版本來确定的。

web服務運作在Tomcat容器中,DispatcherServlet是一種Servlet實作,可以用于将請求派發給指定的控制器中定義的接口

基本使用(建構 RESTful Web 服務)

隻需要編寫如下兩個檔案

【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

建立資源表示類(Greeting類)

我們建立一個entity檔案夾來存放實體類。

寫入如下Greeting類:

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}      

spring boot應用程式使用Jackson JSON庫将類型為Greeting的執行個體自動封裝為JSON。Jackson由web starter預設包括。

建立資源控制器(GreetingController類)

建立controller檔案夾,存放控制器

在Spring建構RESTful web服務的方法中,HTTP請求由控制器處理。這些元件由@RestController注解辨別。

GreetingController如下所示,通過傳回greeting類的一個新執行個體來處理/greeting的GET請求:

package com.xt.springboot.controller;

import com.xt.springboot.entity.Greeting;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

/**
 * @Author: codingXT
 * @Date: 2022-01-20-19:19
 * @Description:
 */
@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}      

@GetMapping注解確定到/greeting的HTTP GET請求映射到greeting()方法。

對于其他HTTP動詞也有相應的注解(例如對于POST的@PostMapping)。還有一個@RequestMapping注解,它們都是從它派生的,可以作為同義詞(例如@RequestMapping(method=GET)等同于@GetMapping)。

@RequestParam将查詢字元串參數name的值綁定到greeting()方法的name參數中。如果請求中沒有name參數,則使用defaultValue,這裡是World。

傳統MVC控制器和前面展示的RESTful web服務控制器之間的一個關鍵差別是建立HTTP響應體的方式。這個RESTful web服務控制器填充并傳回一個greeting對象, 對象資料将作為JSON直接寫入HTTP響應。而不是依靠視圖view技術将greeting資料在伺服器端呈現為HTML。

這段代碼使用了Spring @RestController注解,它将類标記為一個控制器,其中每個方法傳回一個domain對象,而不是一個視圖view。它包含@Controller(帶有此注解的類型被視為控制器)和@ResponseBody(訓示方法的傳回值應綁定到Web響應的Body中)兩個注解。

Greeting對象必須轉換為JSON。由于Spring的HTTP消息轉換器支援,您不需要手動執行此轉換。因為Jackson2在類路徑上,Spring的MappingJackson2HttpMessageConverter被自動選擇來将Greeting執行個體轉換為JSON。

測試運作

在浏覽器輸入

http://localhost:8080/greeting      
【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

通過通路http://localhost:8080/greeting?name=xt 提供名稱查詢字元串參數。

http://localhost:8080/greeting?name=xt      
【Spring Boot】Spring Boot 簡單介紹以及基本使用(建構 RESTful Web 服務)

References:

  • ​​https://spring.io/guides/gs/rest-service/​​
  • ​​https://docs.spring.io/spring-boot/docs/2.6.2/reference/htmlsingle/#getting-started​​
  • ​​https://docs.spring.io/spring-boot/docs/current/reference/html/features.html​​