SpringMVC的响应处理

embedded/2024/12/26 2:26:33/

文章目录

    • 1、传统同步业务数据响应
    • 2、前后端分离异步业务数据响应


1、传统同步业务数据响应

Spring怎么给客户端响应数据,响应数据主要分为两大部分:

  • 传统同步方式:准备好模型数据,在跳转到执行页面进行展示,此方式使用越来越少了,基于历史原因,一些旧项目还在使用;
  • 前后端分离异步方式:前端使用Ajax技术+Restful风格与服务端进行Json格式为主的数据交互,目前市场上几乎都是此种方式了

传统同步业务在数据响应时,SpringMVC又涉及如下四种形式:

  • 请求资源转发;
  • 请求资源重定向;
  • 响应模型数据;
  • 直接回写数据给客户端 。

请求资源转发

在这里插入图片描述

java">@GetMapping("/forward")
public String forward() {// 转发给index.jsp资源return "forward:/index.jsp";
}

请求资源重定向

在这里插入图片描述

java">@GetMapping("/redirect")
public String redirect() {// 重定向给index.jsp资源return "redirect:/index.jsp";
}

响应模型数据,响应模型数据本质也是转发,在转发时可以准备模型数据

java">@GetMapping("/modelAndView")
public ModelAndView modelAndView(ModelAndView modelAndView) {//准备JavaBean模型数据User user = new User();user.setUsername("shenyang");//设置模型modelAndView.addObject("user", user);//设置视图modelAndView.setViewName("/index.jsp");//ModelAndView封装模型数据(页面展示的实体JavaBean)和视图名(往哪转)return modelAndView;
}

index.jsp 中添加如下代码

<h1>转发显示的模型数据是:${user.username}</h1>

直接回写数据,直接通过方法的返回值返回给客户端的字符串,但是SpringMVC默认的方法返回值是视图,可以通过 @ResponseBody 注解显示告知此处的返回值不要进行视图处理,是要以响应体的方式处理的

java">@GetMapping("/response")
@ResponseBody
public String response() throws IOException {//直接回写字符串,不以视图名返回return "Hello shenyang!";
}

2、前后端分离异步业务数据响应

其实此处的回写数据,跟上面回写数据给客户端的语法方式一样,只不过有如下一些区别:

  • 同步方式回写数据,是将数据响应给浏览器进行页面展示的,而异步方式回写数据一般是回写给Ajax引擎的,即谁访问服务器端,服务器端就将数据响应给谁
  • 同步方式回写的数据,一般就是一些无特定格式的字符串,而异步方式回写的数据大多是Json格式字符串

回写普通数据使用@ResponseBody标注方法,直接返回字符串即可,此处不在说明;

回写Json格式的字符串,即将直接拼接Json格式的字符串或使用工具将JavaBean转换成Json格式的字符串回写

java">@GetMapping("/response")
@ResponseBody
public String response() {return "{\"username\":\"shenyang\",\"age\":18}";
}
@GetMapping("/response")
@ResponseBody
public String response() throws JsonProcessingException {//创建JavaBeanUser user = new User();user.setUsername("shenyang");user.setAge(18);//使用Jackson转换成json格式的字符串String json = new ObjectMapper().writeValueAsString(user);return json;
}

在讲解SringMVC接收请求数据时,客户端提交的Json格式的字符串,也是使用Jackson进行的手动转换成JavaBean ,可以当我们使用了@RequestBody时,直接用JavaBean就接收了Json格式的数据。

原理其实就是SpringMVC底层帮我们做了转换,此处@ResponseBody也可以将JavaBean自动给我们转换成Json格式字符串回响应

java">@GetMapping("/response")
@ResponseBody
public User response() throws JsonProcessingException {//创建JavaBeanUser user = new User();user.setUsername("shenyang");user.setAge(18);//直接返回User对象return user;
}

@ResponseBody注解使用优化:在进行前后端分离开发时,Controller的每个方法都是直接回写数据的,所以每个方法上都得写@ResponseBody。

可以将@ResponseBody写到Controller上,那么该Controller中的所有方法都具备了返回响应体数据的功能了

java">@Controller
@ResponseBody
public class QuickController {
}

进一步优化,可以使用@RestController替代@Controller和@ResponseBody,@RestController内部具备这两个注解的功能

java">@RestController
public class QuickController {
}

注意:返回对象的这种方式会添加HTTP响应头声明这是个JSON(Content-Type:application/json),而返回String则真的是返回一个String字符串。



http://www.ppmy.cn/embedded/148772.html

相关文章

如何创建属于自己的大语言模型:从零开始的指南

如何创建属于自己的大语言模型&#xff1a;从零开始的指南 为什么要创建自己的大语言模型&#xff1f; 随着人工智能的快速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;在各种场景中表现出了卓越的能力&#xff0c;例如文本生成、对话交互和内容总结等。虽然市场上…

PHP 新手教程:从入门到构建简单网页

PHP 是一种服务器端脚本语言&#xff0c;广泛用于 Web 开发。今天教大家从零基础学习 PHP&#xff0c;并通过实际代码示例&#xff0c;帮助你理解核心概念并构建一个简单的网页。 一、准备工作 在开始学习之前&#xff0c;你需要&#xff1a; 文本编辑器: 任何文本编辑器都可…

数据分析的分类和EDIT思维框架

为了服务于企业不同层次的决策&#xff0c;商业数据分析过程需要提供相应的数据科学产出物。 一般而言&#xff0c;数据分析需要经历从需求层、数据层、分析层到输出层四个阶段。 第一个阶段是需求层——确定目标&#xff0c;具体目标需要依据具体的层次进行分析&#xff1a…

TDengine时序数据库

TDengine 现有版本 本地3.0,server收费 云数据库 TDengine cloud 云数据库收费&#xff0c;使用docker 如何在docker中使用TDengine 拉取镜像 docker pull tdengine/tdengine:latestdocker run -d -p 6030:6030 -p 6041:6041 -p 6043:6043 -p 6044-6049:6044-6049 -p 6044-…

List深拷贝后,数据还是被串改

List深拷贝后数据还是被串改 List newList new ArrayList<>(oldList)newList.pushAll(oldList)你甚至想到了java8streamAPI以上还不行 List newList new ArrayList<>(oldList) 这是采用构造参数做到的深拷贝&#xff0c;是没问题的 newList.pushAll(oldList) …

前端 Docker 入门之:Docker + Nginx 部署 Vue3 应用

前言 如标题所示&#xff0c;本篇作为我在 Docker 实践后的一些记录与分享&#xff0c;文章的重点在于 Docker&#xff0c;可能会涉及到一些 Linux 的基本操作就不具体展开。 Docker 是啥&#xff1f; Docker 是一个开源的平台&#xff0c;用于开发、运输和运行应用程序。用…

多摩川编码器协议

多摩川编码器是一种常用的绝对值编码器&#xff0c;其协议基于485硬件接口的标准NRZ协议&#xff0c;通讯波特率为固定的2.5Mbps。以下是多摩川编码器协议的详细说明&#xff1a; 硬件接口 多摩川编码器使用RS485接口进行通信&#xff0c;接口定义如下&#xff1a; 5V供电&…

Cesium材质——Material

简介&#xff1a; Cesium.Material对象的目的&#xff0c;就是生成一段名称为czm_getMaterial的函数&#xff08;示例代码如下&#xff09;&#xff0c; 这个czm_getMaterial函数&#xff0c;是shader代码&#xff0c;会被放到片元着色器中使用。 czm_material czm_getMater…