当前位置: 首页 > article >正文

Spring(4)——响应相关

一、返回静态页面

1.1**@RestController@Controller**

想返回如下页面:

在这里插入图片描述

如果我们依旧使用原来的**@RestController**

在这里插入图片描述

在这里插入图片描述

可以看到的是仅仅返回了字符串。

此时将**@RestController改为@Controller**

在这里插入图片描述

在这里插入图片描述

可以看到这次返回的是html页面。

那么**@RestController@Controller有什么区别和联系呢,这就要从MVC架构说起了,最开始设计View是要返回视图的,但随着技术的发展,前后端分离程度越来越高,Java后端开始只关注于后端的事务,不在关注前端的呈现,MVC也就发生了变化,View不在返回视图,而是返回显示视图时所需要的数据。所以前面使用的@RestController**其实返回的是数据。

@RestController = @Controller + @ResponseBody

@Controller :定义⼀个控制器,Spring框架启动时加载,把这个对象交给Spring管理。
@ResponseBody :定义返回的数据格式为⾮视图,返回⼀个text/html信息。

@ResponseBody既可以作为类注解也可以作为方法注解,如果标记在类上,那么表示该类中的所有方法都返回的是数据,如果一个类中既有返回视图的方法也有返回注解的方法,那么只用把**@ResponseBody**标注到对应方法上即可。

所以在有**@Controller注解的基础上添加@ResponseBody注解就等于直接标注@RestController**。

@Controller
@RequestMapping("/response")
public class ResponseController {
    //返回视图
    @RequestMapping("/responseHelloPage")
    public String requestHelloPage(){
        return "/hello.html";
    }

    //返回数据
    @RequestMapping("/responseHelloPage2")
    @ResponseBody
    public String requestHelloPage2(){
        return "返回数据";
    }
}

在这里插入图片描述
在这里插入图片描述

在标注了@Controller的类(表明该类中所有方法都返回视图)里,有一个需要返回数据的方法,但是该方法没有标注@ResponseBody,那么客户端在请求这个页面的时候会发生404错误:

@Controller
@RequestMapping("/response")
public class ResponseController {
    //返回视图
    @RequestMapping("/responseHelloPage")
    public String requestHelloPage(){
        return "/hello.html";
    }

    //返回数据
    @RequestMapping("/responseHelloPage2")
    //去掉@ResponseBody注解
    public String requestHelloPage2(){
        return "返回数据";
    }
}

在这里插入图片描述

1.2 返回Html片段

@RequestMapping("/returnHtml")
    @ResponseBody
    public String returnHtml() {
        return "<h1>Hello,HTML~</h1>";
    }

在这里插入图片描述

1.3 返回Json

@RequestMapping("/returnJson")
    @ResponseBody
    public HashMap<String, String> returnJson() {
        HashMap<String, String> map = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }

在这里插入图片描述

通过Json返回一个对象:

@RequestMapping("/returnUser")
    @ResponseBody
    public User returnUser() {
       User user = new User("zhangsan",18,"未知");
        return user;
    }

在这里插入图片描述

1.4 设置状态码

SpringMVC会根据我们⽅法的返回结果⾃动设置响应状态码,程序员也可以⼿动指定状态码,通过SpringMVC的内置对象HttpServletResponse提供的⽅法来进⾏设置 。

@RequestMapping(value = "/setStatus")
    @ResponseBody
    public String setStatus(HttpServletResponse response) {
        response.setStatus(401);
        return "设置状态码成功";
    }

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/581194.html

相关文章:

  • SAP学习笔记 - 豆知识16 - Msg 番号 V1320 - 明細Category不能使用 (Table T184 OR DIEN TAP)
  • wireguard搭配udp2raw部署内网
  • AI辅助工具Trae和Cursor的区别
  • MySQL事务深度解析:ACID特性、隔离级别与MVCC机制
  • wireshark 如何关闭混杂模式 wireshark操作
  • ubuntu软件
  • 有必要使用 Oracle 向量数据库吗?
  • Python Openpyxl给Excel增加条件规则
  • 深入解析CSS中的图片填充技巧
  • 基于PyTorch的深度学习——机器学习1
  • top查看cpu占用进程100% xmrigMiner进程
  • 使用Python爬虫根据关键词获取衣联网商品列表:实战指南
  • SpringMVC-全局异常处理
  • SQL语句的ON和Where关键词生效时机或作用场景
  • OTP单片机调试工具之—应广单片机ADC调试案例
  • AI系统迎来革命性升级:KV缓存优化的背后
  • 【three.js】三维交互核心技术 - 射线检测与物理级拖拽实现
  • Linux网络编程——简单的TCP网络通信
  • 碳中和小程序:助力用户记录低碳行为,推动环保生活
  • Flutter 基础组件 Scaffold 详解