SpringBoot中的yaml语法及静态资源访问问题

 更新时间:2021年07月30日 09:03:53   作者:xbhog  
这篇文章主要介绍了SpringBoot中的yaml语法及静态资源访问问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

配置文件-yaml

在spring Boot开发中推荐使用yaml来作为配置文件。

基本语法:

  • key: value;kv之间有空格
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释
  • 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义

数据类型:

可以使用的数据类型有date\boolean\string\number\null

单个字面量:

k: v   #k:空格v

对象,键值对的集合,包括:map、hash、set、object

普通写法:

k:
 k1: v1
 k2: v2
 k3: v3

行内写法

k: {k1: v1,k2: v2,k3: v3}

数组:一组按次序排列的值。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;
    }
}

结果如图所示:

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文件夹下面的图片相同:

开启主程序测试结果如下:

当我们随便请求一个不存在的图片,会返回给我们404.

从上面可以看出来,请求进来,先去找Controller看能不能处理。不能处理的所有请求又都交给静态资源处理器。静态资源也找不到则响应404页面

改变默认的静态资源的路径:

在application.yaml文件中:

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

这样我们访问资源的时候必须啊要加res前缀.

但是在欢迎页支持和自定义Favicon上需要关掉·tatic-path-pattern.如果开启的话,index.html与favicon是不起效果的。

如果设置favicon设置的完后,不起作用,可以禁用下浏览器缓存或者重启下idea.

设置的方式(直接放到静态资源文件夹下即可):

直接访问localhost:8080即可看见

到此这篇关于SpringBoot之yaml语法及静态资源访问的文章就介绍到这了,更多相关SpringBoot之yaml语法及静态资源访问 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java类Circle定义计算圆的面积和周长代码示例

    java类Circle定义计算圆的面积和周长代码示例

    要用Java计算圆的周长和面积,需要使用圆的半径和一些数学公式,下面这篇文章主要给大家介绍了关于java类Circle定义计算圆的面积、周长的相关资料,需要的朋友可以参考下
    2024-04-04
  • Netty中解码器的作用及实现详解

    Netty中解码器的作用及实现详解

    这篇文章主要介绍了Netty中解码器的作用及实现详解,本章我们只需要让客户端发送消息的时候循环发送100次,服务端不变,看看服务端是不是接收到了100条消息,需要的朋友可以参考下
    2023-12-12
  • 使用ftpClient下载ftp上所有文件解析

    使用ftpClient下载ftp上所有文件解析

    最近项目需要写个小功能,需求就是实时下载ftp指定文件夹下的所有文件(包括子目录)到本地文件夹中,保留文件到目录路径不变。今天小编给大家分享使用ftpClient下载ftp上所有文件的方法,需要的的朋友参考下吧
    2017-04-04
  • elasticsearch启动警告无法锁定JVM内存

    elasticsearch启动警告无法锁定JVM内存

    今天小编就为大家分享一篇关于elasticsearch启动警告无法锁定JVM内存,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Spring如何动态自定义logback日志目录详解

    Spring如何动态自定义logback日志目录详解

    这篇文章主要给大家介绍了关于Spring如何动态自定义logback日志目录的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 详解Redis 缓存 + Spring 的集成示例

    详解Redis 缓存 + Spring 的集成示例

    本篇文章主要介绍了Redis 缓存 + Spring 的集成示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • spring boot自动装配之@ComponentScan注解用法详解

    spring boot自动装配之@ComponentScan注解用法详解

    @ComponentScan的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中,下面这篇文章主要给大家介绍了关于spring boot自动装配之@ComponentScan注解用法的相关资料,需要的朋友可以参考下
    2023-04-04
  • Java GZIPOutputStream流压缩文件的操作

    Java GZIPOutputStream流压缩文件的操作

    这篇文章主要介绍了Java GZIPOutputStream流压缩文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Spring Boot之内嵌tomcat版本升级操作示例

    Spring Boot之内嵌tomcat版本升级操作示例

    这篇文章主要为大家介绍了Spring Boot之内嵌tomcat版本升级操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 10种简单的Java性能优化

    10种简单的Java性能优化

    你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了很多简单方便的性能优化小贴士以及扩展程序性能的技巧
    2017-11-11

最新评论