springboot——(2)URL配置、依赖注入、Get/Post传参、热部署

  • Post author:
  • Post category:其他


创建一个springboot工程,添加@RestController注解及控制器函数后,即实现了基本的http请求的响应,可参考我的博文创建工程并做好简单的配置。

https://mp.csdn.net/postedit/81870492

下面做一些简单的实践学习,主要包括:修改http请求的端口路径,从配置文件中注入属性(其实就是模拟一下获取后台数据),解析http请求的参数并给予反馈,热部署避免反复重启。

一、修改http访问的端口和路径

resources路径下修改application.properties 配置文件,添加server.port配置如下图所示,修改server的端口号

**application.java 代码如下图所示

编译运行后浏览器输入 localhost:8081 (8081即是刚刚修改的端口号,默认为8080),可看到反馈的字符串

添加全局的url访问路径,在application.properties 配置文件中添加 server.servlet.context-path如下图所示

重新编译运行后,浏览器输入localhost:8081/qftest 即可看到反馈的 hello word 字符串

给控制器函数添加独立的访问路径,在控制器函数的@RequestMapping注解中,修改value的值如下图所示

重新编译运行后,浏览器输入 localhost:8081/qftest/hello 即可看到反馈的 hello word 字符串

至此,http访问端口和路径的修改配置完成

二、从配置文件中读取属性注入到程序中

springboot注入属性可以通过@Value实现

在配置文件application.properties添加属性如图所示

代码中添加将属性注入,同时添加一个新的book控制器函数,如下图所示

编译运行后浏览器输入 localhost:8081/qftest/book  (8081和qftest改成自己配置文件中的server.port 和 server.servlet.context-path配置信息)

发现中文全是乱码,这是工程编码格式的问题。下面进行工程编码格式的修改

file – settings 或输入快捷键 ctrl + alt + S

Editor – File Encodings 或者直接搜索。Default encoding … 选择UTF-8 勾选 Transparent native-…点击OK

好了,配置文件里的中文全部变成乱码了,重新写吧

添加以下配置处理中文乱码问题

server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

重新编译运行后中文乱码问题解决

实际项目开发中不可能所有属性写入全局配置文件,也不可能每次使用@Value注解逐一取出配置的值。同时,程序开发过程中需要取出的属性具有安全的类型,统一做类型的识别和控制。

那么就需要通过java bean 和 独立的配置文件注入属性

创建独立的配置文件,在resources路径下创建book.properties配置文件,添加属性信息如下图所示

#测试注入属性
book.name=红楼梦(book.properties注入属性)
book.author=曹雪芹(book.properties注入属性)
book.price=28(book.properties注入属性)

创建一个java class 命名随意,如下图所示

添加 @Component 注解

添加@ConfigurationProperties(prefix = “book”) @PropertySource(“classpath:book.properties”)两个注解,prefix是前缀,book.name中的book被前缀识别后,会将name依据命名注入给BookBean类中的name变量,classpath指定配置文件名。

spring boot 1.5 版本以下可以直接在ConfigurationProperties注解中配置locations,1.5版本以上已经取消。

//@ConfigurationProperties(prefix = "book",locations = "classpath:book.properties")
//springboot 1.5 版本以上已取消locations属性,不建议一个bean类指定一个配置文件

Book类中添加要注入的name author price 属性,并给出get set方法 如下图所示

修改控制函数

@Autowired
private BookBean bookBean;

@RequestMapping(value = "/booknew",produces = "text/plain;charset=UTF-8")
public String booknew() {
    return "Hello Spring Boot! The BookName is "+bookBean.getName()+";and Book Author is "+bookBean.getAuthor()+";and Book price is "+bookBean.getPrice();
}

留意全局配置文件中相同配置需要注释掉,否则application.properties中的属性信息会将book.properties中的信息覆盖掉。

重新编译运行后,浏览器输入localhost:8081/qftest/booknew

三、识别http请求中的参数

我们现在已经有http请求的响应程序(比如浏览器输入localhost:8081/qftest/booknew即可调用控制器函数),已经可以从配置文件中通过spring的依赖注入得到一定的属性值,那么要进行接口交互就剩下从http请求中获取参数了。

可以使用@RequestMapping注解,通过配置method获取get、post参数,也可以直接使用@GetMapping或者@PostMapping注解获取参数,以下是程序调整过程。

先创建一个javaBean模拟登陆账户密码匹配

创建对应的user.properties

在***application.java 中添加控制器函数

@Autowired
private LoginBean loginBean;
@RequestMapping(value = "/loginByGet",method= RequestMethod.GET)
public String loginByGet(@RequestParam(value = "name")String name,@RequestParam(value = "psw")String psw){
    if(loginBean.login(name, psw)) return "欢迎登陆\n登陆信息:" + loginBean.toString();
    else return "用户名或密码错误";
}

使用@Autowired注解注入loginBean

使用@RequestMapping注解配置子路径loginByGet,配置Get方式传参

使用@RequestParam注解获取参数值

编译运行后,浏览器输入

http://localhost:8081/qftest/loginByGet?name=test&psw=test

得到“用户名或密码不匹配”的反馈

浏览器输入

http://localhost:8081/qftest/loginByGet

不传参数,抛出error页面。我没有定义error页面,得到报错提示

编译运行后,浏览器输入

http://localhost:8081/qftest/loginByGet?name=testname&psw=testpsw

得到“欢迎登陆”的反馈

可以在loginBean上重载tostring方法,组装json反馈。一会再讲怎么在maven下引入json的jar包。

那么至此,我们已经通过Get方法将参数传入到程序中,并判断输入信息进行相应的反馈。一个springboot工程相应http请求并进行交互的基本程序已经成型,下面尝试一下Post传参数。并实践一下其他注解对http请求参数的处理方式。

新增控制器函数loginByPost,同样使用@RequestMapping注解,method设置为post

重新编译运行,使用postman工具模拟post方式的http请求

推荐使用postman模拟工具,方便post方式传参的调试。下载安装使用可参考我的博文


https://blog.csdn.net/qq_15903671/article/details/81907562

在postman中配置post传参,输入url地址

http://localhost:8081/qftest/loginByPost

在body中输入参数

留意,params是get方式传参用的。点击send,可以看到下方反馈结果,也在body里。

至此,post传参方式的http请求的响应也尝试完成。

@GetMapping注解和@PostMapping注解可以理解为@RequestMapping注解和method的组合。

@PathVariable注解可以直接从url地址中截取信息

@RequestBody注解可以在Post方式传参时获取body信息,按照json格式解析后注入到javaBean

具体可参考博文


https://blog.csdn.net/u011517841/article/details/77750120


https://blog.csdn.net/u010399316/article/details/52913299

四、热部署避免反复重启。

上述所有调整在修改代码之后都需要关闭在启用的项目然后重新编译运行,时间浪费严重。在开发阶段反复调整代码时我们需要尽可能的让调试变的简单。springboot可以通过简单的配置实现热部署,让修改或新增的java文件立即生效。

在pom.xml中添加dependency标签,加载spring-boot-devtools工具包,注意加到dependencies标签内

!-- 热部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>

在pom.xml中修改build标签

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <!-- 没有该配置,devtools 不生效 -->
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

修改pom.xml过程中IDE自带的maven会自动下载jar包,刚写完配置的时候会变红报错并在下方显示jar包下载进度,耐心等一会下载好了就不报错了。

修改好配置后,重新编译运行项目,修改java文件中控制器函数的返回字符串,测试一下发现无需重新发布即可生效。

修改前:

修改源码“欢迎登陆”改成“欢迎登陆 test”,保存代码后点击编译,发现控制台自动刷新了一遍发布信息。浏览器刷新测试,发现已自动重新发布成功,修改内容生效。

参考学习博文:

https://blog.csdn.net/u012702547/article/details/53740047



版权声明:本文为qq_15903671原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。