Spring Boot从一到二
这是SpringBoot系列的第二篇,都是一些基础知识,写下来,其实是为了巩固自己的记忆,大部分的内容,都是网上整理的,自己的原创内容很少。
1.SpringBoot注入request和response
三种方式,第一种:通过静态方式获取(详见参考文章),第二种:通过参数直接获得。第三种:注入到类。
1 | // 静态方式 |
参考文章:
1.如何在 Springboot 获取 http request和 http response 的几种方式
2.SpringBoot返回json数据格式
一种是通过@ResponseBody 和@RequestMapping(value = “/request/data”, method = RequestMethod.POST, produces = “application/json;charset=UTF-8”) 中的produces = “application/json;charset=UTF-8” 来设定返回的数据类型是json,utf-8编码,第二种方式,是通过response的方式,直接写到客户端对象。在Springboot中,推荐使用注解的方式。
参考文章:
1.Springboot之返回json数据格式的两种方式-yellowcong
3.静态资源处理
参考文章:
1.Spring Boot 静态资源处理
4.开启Gzip压缩
Gzip有什么作用,就不细说了,就是压缩传输内容啊。
(1) 启动压缩
(2) 默认只压缩超过2048字节的数据,修改server.compression.min-response-size的值可以设置该大小
(3) 压缩类型,默认为text/html、text/xml、text/plain、text/css,可以修改为:application/json
1 | server: |
参考文章:
1.Spring boot开启Gzip压缩
5.打包时跳过测试
默认情况下,使用spring boot开发,在执行:mvn clean package 会默认执行编写的测试用例,如果pom.xml中使用了:spring-boot-maven-plugin 插件,可以在pom.xml中直接添加skipTests属性,添加跳过测试的命令
1 | <properties> |
参考文章:
1.Springboot 打包跳过测试
6.解决烦人的Whitelabel Error Page
有时候编写代码的时候,编写restful风格的api时,总是出现 Whitelabel Error Page 错误:
这是什么原因呢?我都目录结构是这样的:
已经通过步骤4设置了自定义打包路径server
1 | <build> |
而且ApiCtrl中的代码如下:
1 | package com.proheng.api; |
看起来是没啥问题,但是启动spring boot之后,就是找不到: localhost:8078/helloword ,报错:Whitelabel Error Page。
多方查找,原来是因为:@SpringBootApplication默认的扫描位置就是Application所在的同级目录和子目录
解决方式:
方法1:将controller跟启动类放在一个包中,或者在启动类所在包的子包中
方法2:在启动类上添加注解 @ComponentScan(“包名”)
这里可以查看同样时路由的Application同级的ctrl文件代码为:
1 | package com.proheng.gis; |
这个 http://localhost:8078/a/hell 就可以正常的访问到,也验证了我们的说法。
中间的小插曲是,我把server下的包名改成了和application包名一至,还是扫描不到,甚至我设置了 @ComponentScan(basePackages={“com.proheng”}) 也不起作用,弄了好久,结果是因为我把包名的com.proheng写成了com.prohemg ,一字之差,竟让我浪费了很多时间。但是我同时发现了,你写basePackages时只需要写道 com.proheng 就好了,而不需要写到 com.proheng.gis,否则会告你冗余:
最后访问 localhost:8078/helloword 就正常了
参考文章:
1.关于springboot正常启动,路由却无法正常访问的问题
2.spring boot controller路由 url 扫描不到问题
3.SpringBoot入门系列篇(十):改变启动类自动扫描的包
4.SpringBoot包扫描机制
5.SpringBoot Whitelabel Error Page的根本原因,三种解决方案以及其特点
6.spring boot 入门时遇到Whitelabel Error Page错误
