• SpringBoot之yaml语法及静态资源访问


    配置文件-yaml

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

    基本语法:

    • key: value;kv之间有空格

    • 大小写敏感

    • 使用缩进表示层级关系

    • 缩进不允许使用tab,只允许空格

    • 缩进的空格数不重要,只要相同层级的元素左对齐即可

    • '#'表示注释

    • 字符串无需加引号,如果要加,''与""表示字符串内容 会被 转义/不转义

    数据类型:

    可以使用的数据类型有dateooleanstring umber ull

    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

    参考:

    尚硅谷视频

    结束:

    如果你看到这里或者正好对你有所帮助,希望能点个关注或者推荐,感谢;

    有错误的地方,欢迎在评论指出,作者看到会进行修改。

  • 相关阅读:
    Oracle中创建视图
    SQL Server 2012 Express安装图解
    oracle学习笔记
    Oracle中视图的创建和处理方法
    DDL、DML和DCL的理解
    ROS学习--如何结合launch文件使用参数服务器
    stm32多块开发板can总线互联卡死问题
    ROS CAN总线设备接入(二)can总线数据提取和以ros topic形式发布
    ROS CAN总线设备接入(一)Linux动态库的显式调用
    ROS .so载入undefined reference to `dlopen'问题
  • 原文地址:https://www.cnblogs.com/xbhog/p/15076692.html
Copyright © 2020-2023  润新知