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


配置文件-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

參考:

尚硅谷視頻

結束:

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM