Spring MVC入门补充2

学习Spring MVC

响应

Http响应结果可以是数据,也可以是静态⻚⾯,也可以针对响应设置状态码,Header信息等.

返回静态页面
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index⻚⾯</title>
</head>
<body>
Hello,Spring MVC,我是Index⻚⾯.
</body>
</html>
java 复制代码
@RequestMapping("/response")
@RestController
public class Response {
    @RequestMapping("/index")
    public String index() {
        return "/index.html";
    }
}

如果使用上述代码直接进行访问,会发现实际的响应是"/index.html"字符串,而不是这个页面.

想要返回页面就要将注释中的@RestController替换为@Controller.再次运行,结果正常.

java 复制代码
@Controller
public class Response {
    @RequestMapping("/index")
    public String index() {
        return "/index.html";
    }
}
@RestController与@Controller

点进@RestController的源码,发现@RestController是由@Controller与@ResponseBody修饰的.

随着互联⽹的发展,⽬前项⽬开发流⾏"前后端分离"模式,Java主要是⽤来做后端项⽬的开发,所以也就不再处理前端相关的内容了.MVC的概念也逐渐发⽣了变化,View不再返回视图,⽽是返回显示视图时需要的数据.而@RestController就是现在概念中的返回数据,@Controller就是之前概念中的返回视图.

简单的理解为RestController =@Controller+@ResponseBody.@Controller: 定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理,默认返回视图.@ResponseBody:定义返回的数据格式为非视图,返回⼀个text/html信息.

@ResponseBody既可以修饰类,也可以修饰方法.当修饰类时,表示该类的所有⽅法,返回的都是数据,如果修饰⽅法,表⽰该⽅法返回的是数据.

返回HTML代码片段

返回数据时,如果数据中包含HTML片段,也会被浏览器解析.

java 复制代码
    @RequestMapping("/returnHtml")
    @ResponseBody
    public String returnHtml() {
        return "<h1>Hello,HTML~</h1>";
    }
返回JSON

后端⽅法返回结果为对象,SpringMVC就会把对象内容转化为JSON格式.

java 复制代码
    @ResponseBody
    @RequestMapping("/returnJSON")
    public Map<String,String> returnJSON() {
        Map<String,String> map = new HashMap<String,String>();
        map.put("k1","v1");
        map.put("k2","v2");
        map.put("k3","v3");
        return map;
    }
设置状态码

Spring MVC会根据方法返回的结果自动设置响应的状态码,程序员也可以自己设置响应的状态码.418状态码的含义为:I'm a teapot.

java 复制代码
    @RequestMapping("/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response) {
        response.setStatus(418);
        return "设置状态码完成";
    }
相关推荐
for_ever_love__35 分钟前
MySQL 全文索引实战:FULLTEXT、ngram 中文分词与 MATCH AGAINST 到底该怎么用
java·python·mysql·全文检索·分词·索引·ngram
java资料站39 分钟前
五、Spring AI Alibaba · Memory · Saver(短期会话)
java·spring·microsoft
夜之眷属2 小时前
Core dump 崩溃排查:JVM 宕机后,那份 core 文件怎么用 gdb 还原现场
java·运维·服务器·jvm
波加曼大王2 小时前
# vLLM不要迷信PagedAttention神话,聊聊线上藏着的内部碎片陷阱
java·架构
SL_staff2 小时前
目标健康度自检清单:开发者视角下的目标-计划-任务链路断点诊断
java·开源·github
for_ever_love__2 小时前
MySQL 高频面试题 30 问:索引、事务、锁、日志、主从与分库分表(MySQL 8.0 版)
java·数据库·spring boot·mysql·spring cloud·面试·总结
神仙别闹2 小时前
基于C++实现的贪吃蛇游戏平台
java·c++·游戏
布吉岛的石头2 小时前
Java 程序员第 49 阶段11:Java 接 BERT:用 ONNX Runtime 做句向量推理
java·人工智能·python·深度学习·bert·transformer
niucloud-admin2 小时前
JAVA V6 多商户商城 开发文档——JAVA服务端
java·开发语言
alexlifexyz2 小时前
写了个 Claude Code 插件:AI 写的 Java 违反阿里规约,就写不进文件
java