Spring MVC 入门之 设置响应

一、返回数据或者页面

在 Spring 框架中,@Controller@RestController 注解是用来定义 Web 层的控制器的。虽然两者都用于映射 HTTP 请求到处理它们的方法,但是它们的用途和行为有一些重要的区别。了解这些差异可以帮助你更好地设计和实现你的 Web 应用。同时,这些概念都是基于 Spring MVC 框架的,该框架遵循模型-视图-控制器(MVC)设计模式。

1)MVC 设计模式

MVC 设计模式是一种将应用程序分为三个核心组件的方法:模型(Model)、视图(View)和控制器(Controller)。

  • 模型(Model):代表应用程序的数据逻辑,通常与数据库的数据交互操作相关。
  • 视图(View):用于展示数据,即用户界面。在 Web 应用中,视图通常是 HTML,CSS 和 JavaScript 文件。
  • 控制器(Controller):起到模型与视图之间的中介作用。它接收用户的输入并调用模型和视图去完成用户的请求。
2)@Controller

@Controller 注解标记一个类为 Spring 的控制器组件。这个注解通常用于需要返回视图的应用中,比如返回一个 JSP 页面。使用 @Controller 的方法通常返回视图的名称,Spring MVC 会解析这个名称并导向相应的页面。如果方法需要返回数据(如 JSON 或 XML),通常会在方法上添加 @ResponseBody 注解,这样 Spring 会处理返回的数据,将其自动转换为 JSON 或 XML 格式。

3)JSP 页面

JSP (Java Server Pages) 是一种用于生成动态网页的技术,主要由 Java 代码片段和 HTML 标记组成。它是 Java 的服务器端技术,使得开发者能够将页面逻辑与页面布局分离,类似于 PHP、ASP.NET 这类的技术。在 JSP 文件中,你可以插入 Java 代码到 HTML 文件中,Java 代码会在服务器上执行,执行结果会直接嵌入到 HTML 中,然后这个 HTML 会被发送到客户端浏览器。

@Controller
public class WebController {@GetMapping("/page")public String getPage(Model model) {model.addAttribute("message", "This is a regular controller");return "page";}@GetMapping("/data")@ResponseBodypublic Map<String, Object> getData() {return Collections.singletonMap("key", "value");}
}
4)@RestController

@RestController@Controller@ResponseBody 注解的结合体。它的主要用途是创建 RESTful Web 服务。方法在 @RestController 中默认都会使用 @ResponseBody,这意味着你不需要在每个方法上分别添加 @ResponseBody 注解。@RestController 主要用于返回数据,而不是视图。

@RestController
public class ApiController {@GetMapping("/api/data")public User getUser() {return new User("John", "Doe");}
}

在这个例子中,getUser() 方法返回一个 User 对象,Spring 将自动将 User 对象序列化为 JSON 格式,并发送给客户端。

5)比较 @Controller 和 @RestController
  • @Controller 通常用于传统的 Web 应用程序,主要负责返回视图(如 HTML 页面)。它处理请求并返回一个视图名称,Spring MVC 随后解析这个视图名称,并渲染相应的页面。如果需要返回数据(如 JSON 或 XML),则需要在方法上加上 @ResponseBody 注解。
  • @RestController 专为构建 RESTful Web 服务设计,通常用于只返回数据而非视图的服务。在这个注解下的所有控制器方法默认都会使用 @ResponseBody 注解,这意味着方法的返回值会自动转换为 JSON 或其他格式的响应体
6) RESTful Web 服务

RESTful Web 服务(也称为 RESTful APIs)是基于代表性状态转移(REST)架构风格的 Web 服务。REST 是由 Roy Fielding 在其 2000 年的博士论文中定义的,它是一个概念架构,用于指导网络系统的设计和开发,尤其是分布式超媒体系统如 World Wide Web。

RESTful Web 服务利用 HTTP 协议的标准方法来执行操作,这些操作通常包括:

  • GET:用于检索资源。
  • POST:用于创建资源。
  • PUT:用于更新资源。
  • DELETE:用于删除资源。

这些服务通过使用标准 HTTP 方法对资源(数据实体)执行操作,简化了客户端和服务器之间的通信。

RESTful API 的核心原则

REST 架构风格的核心原则包括:

  1. 无状态(Stateless):每个请求从客户端到服务器都必须包含理解和处理请求所需的所有信息,与之前的请求独立。
  2. 客户端-服务器(Client-Server):通过分离客户端和服务器的关注点来提升用户界面的可移植性,同时简化服务器组件的可扩展性。
  3. 统一接口(Uniform Interface):确保系统架构的简化和解耦。要实现统一接口,需遵循资源的标识、通过表示操作资源、自描述消息和超媒体作为应用程序状态的引擎(HATEOAS)等原则。
  4. 可缓存(Cacheable):数据在请求或响应中定义为可缓存或不可缓存。有效管理缓存可以减少客户端-服务器交互次数。
  5. 分层系统(Layered System):客户端通常无法直接与存储资源的服务器通信,而是通过一个或多个中间层进行通信,增加了网络的可扩展性并通过负载均衡和共享缓存提高了性能。
  6. 按需代码(Code on Demand,可选):服务器可以临时扩展或自定义客户端的功能,通过发送可执行代码给客户端。

RESTful Web 服务的一些主要优点包括:

  • 可扩展性:分离客户端和服务器以及无状态的操作使得 RESTful Web 服务易于扩展。
  • 简单性:使用已经广泛采用的 HTTP 协议简化了开发。
  • 通用性:标准的 HTTP 方法和 MIME 类型使用广泛,使得 RESTful 服务可以被不同语言和平台的客户端使用。
  • 灵活性:可以使用 XML、JSON、YAML 或任何其他机器可读的格式返回数据,根据需要灵活选择。

二、设置状态码与 Header

a) 设置状态码
1)直接使用 HttpServletResponse 设置响应的状态码。
import javax.servlet.http.HttpServletResponse;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StatusCodeController {@GetMapping("/status-direct")public void directStatus(HttpServletResponse response) {response.setStatus(HttpServletResponse.SC_BAD_REQUEST); // 400 状态码}
}
2)使用 @ResponseStatus

Spring MVC 允许你通过 @ResponseStatus 注解在方法上直接声明响应的状态码。这种方法简洁明了,适用于不需要动态改变状态码的情况。

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StatusCodeController {@GetMapping("/status-annotated")@ResponseStatus(HttpStatus.CREATED)public String annotatedStatus() {return "Resource created";}
}
b) 设置Header

在 Spring MVC 中,设置 HTTP 响应头是一个常见的需求,特别是在构建 RESTful APIs 或动态生成内容时。你可以使用 HttpServletResponse 直接操作响应,或者使用 Spring 的 ResponseEntity 来更优雅地设置响应头。

1) 使用 HttpServletResponse

HttpServletResponse 是一个 Servlet API,它提供了直接操作 HTTP 响应的方法,包括设置状态码、响应头和发送错误信息等。

import javax.servlet.http.HttpServletResponse;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HeaderController {@GetMapping("/set-header")public void setHeader(HttpServletResponse response) {// 设置自定义头信息response.setHeader("Custom-Header", "value");response.setHeader("Content-Type", "text/plain");// 设置其他 HTTP 标准头信息response.setDateHeader("Expires", System.currentTimeMillis() + 86400000); // 24小时后过期}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/146640.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【华为杯】2024华为杯数模研赛E题 解题思路

题目 高速公路应急车道紧急启用模型 问题背景 高速公路拥堵现象的原因众多&#xff0c;除了交通事故外&#xff0c;最典型的就是部分路段出现瓶颈现象&#xff0c;主要原因是车辆汇聚&#xff0c;而拥堵后又容易蔓延。高速公路一些特定的路段容易形成堵点&#xff0c;如匝道…

(done) 什么是 GMM? Gaussian Mixture Model,高斯混合模型

来源&#xff1a;https://www.bilibili.com/video/BV13b411w7Xj/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 &#xff08;视频质量很高&#xff0c;一共四个视频&#xff0c;我只看了一个&#xff09; 直接看视频吧&#xff0…

2024年度性价比高的头戴式耳机怎么选?TOP4爆款产品推荐,速藏!

在 2024 年&#xff0c;头戴式耳机市场精彩纷呈&#xff0c;众多产品让人眼花缭乱。想要选到性价比高的头戴式耳机&#xff0c;需综合考量音质、降噪、续航等多个关键要素。2024年度性价比高的头戴式耳机怎么选&#xff1f;接下来为大家推荐四款爆款产品&#xff0c;让你快速了…

应届生必看 | 毕业第一份工作干销售好不好?

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

基础漏洞——SSRF

目录 一.原理 二.引起ssrf的函数 三.这些函数具体作用 &#xff08;1&#xff09;File_get_content() &#xff08;2&#xff09;Fsockopen() &#xff08;3&#xff09;Curl_exec() 四.常见的业务场景&#xff08;可能出现的漏洞的地方&#xff0c;漏洞挖掘&#xff09…

为什么消费还能返利?2024年全新返利模型!

在当今竞争激烈的电商市场中&#xff0c;一种名为“循环购”的创新商业模式正悄然兴起&#xff0c;以其独特的消费返利机制和积分体系&#xff0c;为消费者带来了前所未有的购物体验 一、循环购模式&#xff1a;消费即投资的智慧选择 循环购模式并非简单的消费行为&#xff0c…

无人机集群路径规划:麻雀搜索算法(Sparrow Search Algorithm, SSA)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…

Spring Boot框架在心理教育辅导系统中的应用

3 系统分析 3.1可行性分析 在进行可行性分析时&#xff0c;我们通常根据软件工程里方法&#xff0c;通过四个方面来进行分析&#xff0c;分别是技术、经济、操作和法律可行性。因此&#xff0c;在基于对目标系统的基本调查和研究后&#xff0c;对提出的基本方案进行可行性分析。…

5、论文阅读:深水下的图像增强

深水下的图像增强 前言介绍贡献UWCNN介绍网络架构残差Residuals块 Blocks网络层密集串联网络深度减少边界伪影网络损失Loss后处理前言 水下场景中,与波长相关的光吸收和散射会降低图像的可见度,导致对比度低和色偏失真。为了解决这个问题,我们提出了一种基于卷积神经网络的…

How can I integrate OpenAI Whisper model into a Kotlin app?

题意: 如何将 OpenAI Whisper 模型集成到 Kotlin 应用程序中&#xff1f; 问题背景&#xff1a; I require guidance on incorporating Whisper OpenAI into my Android application developed with Kotlin in Android Studio. Unfortunately, I havent come across any rele…

【图文详解】什么是微服务?什么是SpringCloud?

目录 一.认识微服务架构 ▐ 微服务带来的挑战 二.微服务解决方案SpringCloud ▐ SpringCloud的版本 ▐ SpringCloud和SpringBoot的关系 ▐ SpringCloud实现方案 Spring Cloud Netfix Spring Cloud Alibaba ▐ Spring Cloud 实现对比 在入门Spring Cloud 之前&#xff…

2024 “华为杯” 中国研究生数学建模竞赛(F题)深度剖析|X射线脉冲星光子到达时间建模|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题&#xff01; CS团队倾注了大量时间和心血&#xff0c;深入挖掘解…

稀土抗紫外屏蔽剂在涂层中的应用

稀土抗紫外屏蔽剂的主要作用是有效地吸收或阻挡紫外线&#xff0c;从而保护材料或表面免受紫外线的伤害&#xff0c;延长其使用寿命。 稀土抗紫外屏蔽剂在涂层上的应用具有以下显著优势&#xff1a; 1. 增强涂层的耐久性&#xff1a;稀土抗紫外屏蔽剂能够有效吸收和散射紫外线…

无人机集群路径规划:雾凇优化算法( rime optimization algorithm,RIME)求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…

Lubuntu电源管理

lxqt-config-powermanagement 打开托盘图标 Show icon 电源管理 电源管理管理笔记本电脑电池的低电量、关闭笔记本电脑盖的操作以及计算机长时间闲置时应采取的措施。 用法 LXQt 电源管理会监控您的电池、笔记本电脑盖、空闲情况&#xff0c;以及当您按下电源或睡眠按钮时会发…

Linux根文件系统构建

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 Linux“三巨头”已经完成了 2 个了&#xff0c;就剩最后一个 rootfs(根文件系统)了&#xff0c;本章我们就来学习一下根文件系统的组成以及如何构建…

数模打怪(七)之回归分析

一、什么是回归分析 1、回归分析的含义 回归分析&#xff1a;通过研究自变量X和因变量Y的相关关系&#xff0c;尝试去解释Y的形成机制&#xff0c;进而达到通过X去预测Y的目的。 在绝大多数情况下&#xff0c;我们没有能力去探究严格的因果关系&#xff0c;只能通过回归分析…

小米 13 Ultra机型工程固件 资源预览与刷写说明 步骤解析

小米 13 Ultra机型---机型代码为ishtar 。工程固件可以辅助修复格机或者全檫除分区后的基带修复。可以用于修复TEE损坏。以及一些分区的底层修复。此款固件也可以为更换UFS后的底包。 通过博文了解 1💝💝💝-----此机型工程固件的资源分享 下载 刷写注意事项 2💝💝…

加薪非要老总批?——职责链模式

文章目录 加薪非要老总批&#xff1f;——职责链模式加薪代码初步职责链模式职责链的好处加薪代码重构加薪成功 加薪非要老总批&#xff1f;——职责链模式 老板&#xff0c;我要加薪&#xff01; 时间&#xff1a;7月2日20点  地点&#xff1a;小菜、大鸟住所的客厅  人…

奇安信渗透2面经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…