Spring Boot --- Spring MVC: Controller返回值


一个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提倡使用ThymeleafFreemarker)
<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,返回StringModelAndView.
    1. String:
      String值为动态资源位于resources/templates目录下的相对路径(可省略后缀名)
    2. ModelAndView:
      根据ModelAndView构造函数指定资源位置

数据(JSON,XML,字符串, 图片)

  • 返回数据类型是Spring Boot编写RestFul风格接口的核心。
  • Spring Boot中 ,若需要返回数据类型,则需在Controller资源上添加@ResponseBody
  • Controller上将@Controller更改为RestController,则该Controller下所有方法等同于加上@ResponseBody

返回类型

  1. @ResponseBody注解的方法中,返回值可为Object.
  2. Spring MVC将会把返回值序列化为相应的数据格式(JSON,XML).
  3. 序列化为什么类型的数据,取决于请求的Response对象Content-Type的值.

JSON

  • Controller注解为@ResponseBody时,Content-Type默认为application/json;charset=UTF-8,即返回值默认将进行JSON序列化.
  • Spring Boot默认集成的JSON序列化库Jackson
  • 更多

XML

  1. 对返回对象的实体类设置xml序列化规则
    1. @XmlRootElement(name = "result")
  2. @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. 返回硬盘上的图片资源

  1. 通过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());
    }

猜你喜欢

转载自blog.csdn.net/d292222100/article/details/81904512