Spring MVC后续

目录

[1 响应](#1 响应)

[1.1 返回静态页面](#1.1 返回静态页面)

[1.2 返回数据@ResponseBody](#1.2 返回数据@ResponseBody)

[1.3 返回HTML代码片段](#1.3 返回HTML代码片段)

[1.4 返回JSON](#1.4 返回JSON)

[1.5 设置状态码](#1.5 设置状态码)

1 响应

1.1 返回静态页面

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index页面</title>
</head>
<body>
    Spring MVC,index页面.
</body>
</html>
java 复制代码
@RequestMapping("/use")
@RestController
public class SpringBoot {
    @RequestMapping("/index")
    public String index() {
        //返回index.html
        return  "/index.html";
    }
}

这时候我们的页面没有正确展示出来 ,http相应吧"/index.html"当做了http响应正文的数据,要想让Spring MVC正确的识别index.html是一个静态页面,并正确返回,我们需要把@RestController改为@Controller

java 复制代码
@RequestMapping("/use")
@Controller
public class SpringBoot {
    @RequestMapping("/index")
    public String index() {
        //返回index.html
        return  "/index.html";
    }
}

@RestController和@Controller的区别

在早期的概念中,MVC模式,后端会返回视图,目前项目开发流行"前后端分离"模式,Java主要用来做后端开发,所以就不在处理前端的内容了,MVC的概念页发生了变化,View不在返回视图,而是返回视图所需的数据了

@RestController其实就是返回数据,@RestController=@Controller + @ResponseBody

@Controller:定义一个控制器,Spring框架启动时加载,把这个对象交给Spring管理

@ResponseBody:定义返回的数据格式为非视图,返回一个text/html信息

因此,想返回视图的话,只需要把@ResponseBody去掉就可以了,也就是@Controller

1.2 返回数据@ResponseBody

java 复制代码
@RequestMapping("/use")
@Controller
@ResponseBody
public class SpringBoot {
    @RequestMapping("/index")
    public String index() {
        //返回index.html
        return  "/index.html";
    }
}

只需要加上 @ResponseBody注解,该方法就会把"/index.html"当做一个数据返回给前端

@ResponseBody即是类注解,又是方法注解

如果作用在类上,表示该类的所有方法,返回的都是数据,如果作用在方法上,表示该方法返回的是数据,也就是在类上条件 @ResponseBody就相当于在所有方法上添加 @ResponseBody注解

如果一个类的方法里,即有返回数据,又有返回页面的,就需要把 @ResponseBody注解到对应的方法上

java 复制代码
@RequestMapping("/use")
@Controller
public class SpringBoot {
    @RequestMapping("/index")
    public String index() {
        //返回index.html
        return  "/index.html";
    }
    @RequestMapping("/Data")
    @ResponseBody
    public String Data() {
        return "返回数据";
    }
}

写多个注解是,没有先后顺序

java 复制代码
@RequestMapping("/use")
@Controller
public class SpringBoot {
    @RequestMapping("/index")
    public String index() {
        return  "/index.html";
    }
    @RequestMapping("/Data")
    public String Data() {
        return "返回数据";
    }
}

如果去掉@ResponseBody注解,程序会报404错误,因为程序认为需要返回的视图,根据内容去查找文件,但是查询不到,路径不存在,报404

1.3 返回HTML代码片段

java 复制代码
@RequestMapping("/use")
@RestController
public class SpringBoot {
    @ResponseBody
    @RequestMapping("/returnHTML")
    public String returnHTML() {
        return "<h1>Spring,HTML</h1>";
    }
}

通过抓包可以看到Content-Type为text/html

在响应中的Content-Type常见的有以下几种:

text/html:body数据格式是HTML

text/css:body数据格式为CSS

application/javscript:body数据格式为JavaScript

application/json:body数据格式为JSON

1.4 返回JSON

java 复制代码
@RequestMapping("/use")
@RestController
public class SpringBoot {
    @ResponseBody
    @RequestMapping("/returnJson")
    public HashMap<String,String> returnJson() {
        HashMap<String,String> map = new HashMap<>();
        map.put("1","1");
        map.put("2","2");
        return map;
    }
}

通过抓包,可以看到响应的格式为json格式

当接口返回的是String时,Content-Type是text/html

当接口返回的是对象时,Content-Type是application/json

1.5 设置状态码

java 复制代码
@RequestMapping("/use")
@RestController
public class SpringBoot {
    @ResponseBody
    @RequestMapping("/setStatus")
    public String setStatus(HttpServletResponse response) {
        response.setStatus(401);
        return "设置成功";
    }
}
相关推荐
木白CPP15 分钟前
Linux DMA驱动详解(二)-----DMA的使用者
java·linux·运维
caoerzhong19 分钟前
JeeWMS 开源仓库管理系统 GPL-3.0 合规指南:Java WMS 二次开发前必须弄清的授权边界
java·开发语言·开源·vue
Sam_Deep_Thinking25 分钟前
单一职责原则:JAVA LocalDate的设计取舍
java·后端·程序员·单一职责原则
杨杨杨大侠34 分钟前
Java 不再需要 JVM?一文看懂 GraalVM Native Image、Substrate VM 与 JDK
java·jvm·java ee
Sylvia33.1 小时前
火星数据体育API|一站式接入足球篮球电竞等18+项目实时数据
java·开发语言·python·websocket·游戏
李少兄1 小时前
解决 MySQL Lock wait timeout exceeded 报错
java
va学弟1 小时前
Java 语言特性:泛型(Generics)
java·泛型
SL_staff2 小时前
插单风险的数据闭环治理:JVS-BI 在制造业实时预警中的技术实践
java·数据分析·数据可视化
白远山2 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
user_admin_god2 小时前
第 01 篇:OpenAI 兼容 API 初探 —— 用 curl 跑通第一次对话
java·人工智能·spring boot·语言模型·devops