一个Http请求.它的返回值可以是:
- 静态资源(html
, js
, css
, txt
)
- 动态页面(JSP
, Thymeleaf
,Freemarker
)
- 数据(JSON
,XML
,字符串
, 图片
);
静态资源(html
, js
, css
, txt
,图片
)
- 依照
Spring Boot
的项目架构,项目内的静态资源存放于resources/static
文件夹. - 在该文件夹下的文件,不需要经由
controller
,可直接通过/子文件夹/文件名
访问获得.
动态页面(JSP
, Thymeleaf
,Freemarker
)
- 依照
Spring Boot
的项目架构, 项目内的动态资源存放于resources/templates
. - 访问动态资源,需导入对应动态页面的解析库.(
Spring Boot
提倡使用Thymeleaf
或Freemarker
)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 访问该文件夹下的动态页面,需经由
controller
,返回String
或ModelAndView
.
String
:
String
值为动态资源位于resources/templates
目录下的相对路径(可省略后缀名)ModelAndView
:
根据ModelAndView
构造函数指定资源位置
数据(JSON
,XML
,字符串
, 图片
)
- 返回数据类型是
Spring Boot
编写RestFul
风格接口的核心。 - 在
Spring Boot
中 ,若需要返回数据类型,则需在Controller
的资源
上添加@ResponseBody
。 - 在
Controller
上将@Controller
更改为RestController
,则该Controller
下所有方法等同于加上@ResponseBody
返回类型
@ResponseBody
注解的方法中,返回值可为Object
.Spring MVC
将会把返回值序列化为相应的数据格式(JSON
,XML
).- 序列化为什么类型的数据,取决于请求的
Response对象
的Content-Type
的值.
JSON
- 当
Controller
注解为@ResponseBody
时,Content-Type
默认为application/json;charset=UTF-8
,即返回值默认将进行JSON序列化. Spring Boot
默认集成的JSON序列化库
为Jackson
- 更多
XML
- 对返回对象的实体类设置xml序列化规则
@XmlRootElement(name = "result")
- 在
@RequestMapper
或其衍生子类上添加produces
属性
@GetMapping(produces = "application/xml;charset=UTF-8")
ps
produces
默认值为:application/json;charset=UTF-8
图片
图片包含JPA|JPEG
,PNG
,BMP
等图片格式.
由Spring Boot
产生的图片资源包括:
1.resources/static
文件夹内的静态图片资源
2. 项目外磁盘中的图片资源
3. 由代码产生的图片对象资源
1. 返回resources/static/
静态图片资源
同静态资源的地址访问可直接读取
2. 返回硬盘上的图片资源
- 通过
WebMvcConfigurationSupport
映射资源地址
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
@Configuration
public class MyWebMvcConfigurationSupport extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
super.addResourceHandlers(registry);
registry.addResourceHandler("/image/**") // 映射为项目下的访问地址
.addResourceLocations("file:/Users/yucoang/Desktop/"); // 硬盘中的地址
}
}
3. 项目产生的图片对象资源
@RequestMapper.produces
设置为image/jpeg
或其他图片类型- 将图片对象通过IO写入到
Response
中
@GetMapping(value = "/1", produces = "image/jpeg")
public void say(HttpServletResponse response) throws IOException {
// 这里引用了一个图片验证码的生成库。
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
defaultKaptcha.setConfig(new Config(new Properties()));
// 图片对象资源
BufferedImage bi = defaultKaptcha.createImage("1234");
// 通过ImageIO写入到Response对象中.
ImageIO.write(bi, "jpg", response.getOutputStream());
}