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

网友投稿 818 2022-12-23

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

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

目录配置文件-yaml基本语法:数据类型:Web开发之简单功能分析静态资源的访问问题改变默认的静态资源的路径:

配置文件-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中的提示插件:

org.springframework.boot

spring-boUjXzsGot-configuration-processor

true

如果在打包的时候不需要打包该插件,可以在插件中设置如下:

org.springframework.boot

spring-boot-maven-plugin

org.springframework.boot

spring-boot-configuration-processor

安装完成后,需要启动一下项目,让他生效。

实例

Person类:

@Data

@Component

@ConfigurationProperties(prefix = "person")

public class Person {

private StUjXzsGring userName;

private Boolean boss;

private Date birth;

private Integer age;

private Pet pet;

private String[] interests;

private List animal;

private Map score;

private Set salarys;

private Map> 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即可看见

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:盘锦一体化政务服务平台(盘锦市一体化在线政务服务平台)
下一篇:物联网与车联网是什么专业(物联网工程物联网汽车专业)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~