还有一点该文件application.properties的名字不能修改,感兴趣的同学可以改一下试试,看看还起作用吗?
选中resources文件,右键——>new——>file
名字application.yml
还有一点,yml文件和pro文件虽然后缀不同,不要就认为他们可以同名,但是在java中是不允许同名的,这是一个很重要的规则,我这里为了演示所以写成同名的了,我后面的的讲解中是已经把pro文件改名使之失效了的
该注解是@ResponseBody和@Controller共同组成,@Controller标记的类实际上就是个SpringMVC Controller对象,它是一个控制器类,@ResponseBody注解是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后,写入到response对象的body区(响应体中),通常用来返回JSON数据,可以分开用,也可以直接用@RestController,但一般来说直接使用@RestController较多
package com.gt.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RestController有一下几点作用
* 1、将数据转换为JSON数据并呈现给页面
* 2、将使用该注解的类交给spring容器管理
* 3、springMvc调用该对象并接收用户请求
*/
@RestController
public class Countroller {
@RequestMapping("/get1")
public String get1(){
return "你好@RestController";
}
}
在浏览器里输入localhost:8080/get1(端口号我们在yml已经设定好的,如果你用的pro文件默认的也是8080。。。@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上)
但是我们的数据是动态的,是通过属性进行赋值的,而不是写死的,也不利于扩展
一般某些只有后台特有的一些数据,可以将数据写到配置文件yml中,然后再为属性动态赋值,比如后台管理的用户名和密码,这个不是用户注册的,是特有的,
# yml文件的语法也是K和V结构,但是和pro有所区别
# 写法: key:(一定要有空格)value
# 字符集: 程序读取文件时,默认采用的是UTF-8
# yml是有层级结构的,一定一定需要注意缩进 比如以下代码
server:
port: 8080 #这里同样的表示的也是端口号
# 进行命名时要指定前缀,因为比如username和password用的是最频繁的
# 属性名字,在数据库中也比较常用,所以最好加前缀进行区分,千万要注意空格
# 和缩进
mylove:
username: root
password: root
写好配置文件就可以进行动态赋值了,使用@Value注解,可以获取对应属性文件中定义的属性值。语法结构:@Value(“${key}”),key就是yml文件的语法key,然后在controller中继续写代码
package com.gt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RestController有一下几点作用
* 1、将数据转换为JSON数据并呈现给页面
* 2、将使用该注解的类交给spring容器管理
* 3、springMvc调用该对象并接收用户请求
*/
@RestController
public class Countroller {
/*@Value(${key})
${key}是有spring提供的springel表达式,我们习惯叫做spel表达式
主要是在配置文件中获取key,然后为属性赋值
*/
@Value("${mylove.username}")
String username;
@Value("${mylove.password}")
String password;
@RequestMapping("/get2")
public String get2(){
return "你好"+username+" "+password;
}
@RequestMapping("/get1")
public String get1(){
return "你好@RestController";
}
}
重新启动,在浏览器中输入http://localhost:8080/get2,
讲这儿了,有个问题得说明一下,yml文件时属于springboot的核心配置文件,主要是整合第三方框架的,且属于系统配置文件,可能有点抽象,举个例:在咱们Windows系统中,某些系统配置文件当你要删除时它会提醒你,这个不能删除,删除了会影响某一项或者多项的操作,那这样可能会导致你的系统用着用着就用不了了,甚至某些系统配置文件你是直接无法删除的,因为一旦让你删除整个系统直接废掉,得重装系统。
所以由于咱们的yml文件中的mylove的usename和password属于业务数据,不是核心配置数据,如果我们把大量的业务数据写在yml文件中,会使得我们的耦合性大大增加,本来spring就是降低耦合性的,结果你还增加,是不符合规则的。因此业务数据我们要写在pro文件里。
由于之前application.properties文件被我修改成application1.properties失效了,所以现在spring为pro文件提供了解决方案,不管pro文件的名字怎么变,只要后缀是properties就行
在pro文件中继续写
# 应用名称
spring.application.name=springboot_demo1
# 应用服务 WEB 访问端口
server.port=8080
# 1.文件语法
# 数据结构类型 : k=v(key=value)
# 字符集编码 : 程序读取文件时,编码一般默认的都是采用ISO-8859-1(注意:程序读取和软件编辑的字符集是毫无关系的)
# 特别提醒: k需要写完整且不能缩进,而且也没有层次性,导致可读性较差(pro的弊端)
# pro文件不能写中文的,否则会乱码
mylove.username1=root1
mylove.password1=我爱你
然后接着在controller类中继续添加
package com.gt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RestController有一下几点作用
* 1、将数据转换为JSON数据并呈现给页面
* 2、将使用该注解的类交给spring容器管理
* 3、springMvc调用该对象并接收用户请求
*/
@RestController
@PropertySource("classpath:/application1.properties")
public class Countroller {
/**
* 解决失效的pro文件,让spring容器去管理
* 方法:@PropertySource("/xxx.properties") 指定配置文件交给Spring
* 容器管理
*/
@Value("${mylove.username1}")
private String username1;
@Value("${mylove.password1}")
private String password1;
@RequestMapping("/get3")
public String get3(){
return "你好"+username1+" "+password1;
}
/*@Value(${key})
${key}是有spring提供的springel表达式,我们习惯叫做spel表达式
主要是在配置文件中获取key,然后为属性赋值
*/
@Value("${mylove.username}")
String username;
@Value("${mylove.password}")
String password;
@RequestMapping("/get2")
public String get2(){
return "你好"+username+" "+password;
}
@RequestMapping("/get1")
public String get1(){
return "你好@RestController";
}
}
重启项目,在浏览器中输入http://localhost:8080/get3,已经实现失效的pro文件交给spring管理
解决乱码的方式
重启项目, 刷新浏览器,乱码解决
@PropertySource注解:加载指定的属性文件(*.properties)到 Spring 的管理容器中,然后配合@Value使用。