SpringBoot之yaml語法及靜態資源訪問

xbhog發表於2021-07-29

配置檔案-yaml

在spring Boot開發中推薦使用yaml來作為配置檔案。

基本語法:

  • key: value;kv之間有空格

  • 大小寫敏感

  • 使用縮排表示層級關係

  • 縮排不允許使用tab,只允許空格

  • 縮排的空格數不重要,只要相同層級的元素左對齊即可

  • '#'表示註釋

  • 字串無需加引號,如果要加,''與""表示字串內容 會被 轉義/不轉義

資料型別:

可以使用的資料型別有date\boolean\string\number\null

  1. 單個字面量:

    k: v   #k:空格v
    
  2. 物件,鍵值對的集合,包括:map、hash、set、object

    • 普通寫法:

      k:
       k1: v1
       k2: v2
       k3: v3
      
    • 行內寫法

      k: {k1: v1,k2: v2,k3: v3}
      
  3. 陣列:一組按次序排列的值。array、list、queue

    • 普通寫法:

      k: 
       - v1
       - v2
       - v3
      
    • 行內寫法

      k: [v1,v2,v3]
      

編寫之前,我需要配置yaml中的提示外掛:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

如果在打包的時候不需要打包該外掛,可以在外掛中設定如下:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
            </exclude>
        </excludes>
    </configuration>
</plugin>

安裝完成後,需要啟動一下專案,讓他生效。

例項:

Person類:

@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String userName;
    private Boolean boss;
    private Date birth;
    private Integer age;
    private Pet pet;
    private String[] interests;
    private List<String> animal;
    private Map<String, Object> score;
    private Set<Double> salarys;
    private Map<String, List<Pet>> allPets;
}

Pet類:

@Data
public class Pet {
    private String name;
    private Double weight;
}

在recources資源目錄下建立application.yaml檔案,使用yaml表示上述的屬性:

person:
  user-name: xbhog
  boss: false
  birth: 2021/7/27
  age: 18
  pet: {name: 阿毛,weight: 23}
  interests: [唱歌,跳舞,玩遊戲]
  animal:
    - jerry
    - mario
  score:
    english: 30
    math: 70
 #第二種寫法:score: {english: 30,math: 70}
  salarys:
    - 277
    - 8999
    - 10000
  all-pets: #該allPet有兩個k(sick、health),每個key包含一個list
    sick: 
      - {name: tom}
      - {name: jerry,weight:47}
    health: [{name: mario,weight: 47}]

建立一個controller來測試我們的配置檔案有沒有生效:

因為我們之前已將將person中的屬性對映到了application.yaml檔案中,並且把person加入到容器中。

@Component
@ConfigurationProperties(prefix = "person")

所以我們在myconfig中做測試:

package com.xbhog.controller;

import com.xbhog.popj.Car;
import com.xbhog.popj.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {
    @Autowired   //自動配置,找到容器中的person
    Person person;
    
    @RequestMapping("/person")
    public Person person(){
        return person;
    }
}

結果如圖所示:

image-20210728203700819

Web開發之簡單功能分析

靜態資源的訪問問題

只有靜態資源放在以下的檔案目錄中才可以:

/static/、public/、 resources/ 、META-INF/resources

最後一個測試沒有成功,訪問META-INF/resources/img.png返回404,如果有感興趣的小夥伴可以測試一下。

訪問的方法是:當前專案根路徑/ + 靜態資源名 (localhost:8080/xxx.img)

假如我們的請求路由跟圖片的名字重複了,spring boot是先請求哪個呢?

我們建立一個controller:

package com.xbhog.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class mycontro {
    @RequestMapping("/publicimg.png")
    public String demo(){
        return "asss";
    }
}

讓它與public資料夾下面的圖片相同:

image-20210728204217924

開啟主程式測試結果如下:

image-20210728204412526

當我們隨便請求一個不存在的圖片,會返回給我們404.

從上面可以看出來,請求進來,先去找Controller看能不能處理。不能處理的所有請求又都交給靜態資源處理器。靜態資源也找不到則響應404頁面

改變預設的靜態資源的路徑:

在application.yaml檔案中:

spring:
  mvc:
    static-path-pattern: /res/**

這樣我們訪問資源的時候必須啊要加res字首.

image-20210728205013363

image-20210728205050657

但是在歡迎頁支援和自定義Favicon上需要關掉·tatic-path-pattern.如果開啟的話,index.html與favicon是不起效果的。

如果設定favicon設定的完後,不起作用,可以禁用下瀏覽器快取或者重啟下idea.

設定的方式(直接放到靜態資原始檔夾下即可):

image-20210728205345207

直接訪問localhost:8080即可看見

image-20210728205605615

參考:

尚矽谷視訊

結束:

如果你看到這裡或者正好對你有所幫助,希望能點個關注或者推薦,感謝;

有錯誤的地方,歡迎在評論指出,作者看到會進行修改。

相關文章