Spring MVC 响应处理:页面、素材与状态配备详解

news/2025/12/1 14:51:36/文章来源:https://www.cnblogs.com/yangykaifa/p/19292777

个人主页:♡喜欢做梦

欢迎  点赞  ➕关注  ❤️收藏  评论


目录

响应

定义

返回静态页面

返回数据:@ResponseBody

 @ResponseBody和@RestController的区别

返回JSON

状态码

状态码的定义

设置状态码

设置header

综合性练习

加法计算器

用户登入


响应

定义

响应(Response)是接收方(服务器、服务或设备)针对发送方(客户端)发起的“请求”所返回的反馈信息。

返回静态页面

html代码:

Title

我是index页面

代码:

@RestController
@RequestMapping("response")
public class ResponseController {@RequestMapping("/1")public String method1(){return "/index.html";}
}

结果:咦?这结果怎么不是我们想要的页面?为什么会这样?那要怎么修改?

这个代码的问题在于@RestController会将返回值直接作为响应体。这里我们需要用到@Controller。

为什么呢?

@Controller:@Controller是承接http请求,完成视图解析,方法返回的字符串会被视图解析器处理,找到对应的页面文件,响应给前端。

@RestController:是@ResponseBody+@Controller的组合注解,核心是直接返回数据,而不是视图,不会做视图解析流程。

那这样就可以了吗

正确代码如下:

@Controller
@RequestMapping("response")
public class ResponseController {@RequestMapping("/1")public String method1(){return "/index.html";}
}

返回数据:@ResponseBody

@ResponseBody:他主要用于将方法的返回值直接写入http响应体中,而不是将其解析为视图名称去进行视图跳转。简单来说,就是把你要返回的东西直接原样发给前端,不会当成路径页面瞎找。

    @RequestMapping("/2")@ResponseBodypublic String method2(){return "返回数据";}

如果没有加@ResponseBody,结果如下,有人可能会疑问,那为什么我返回静态页面第一个错误的代码,也可以返回数据。因为第一个错误代码里面使用的是@RestController注解,核心是直接返回数据。

那@ResponseBody和@RestController又有什么区别?

 @ResponseBody和@RestController的区别

对比@RestController@ResponseBody
作用范围只能用在类上只能用在方法上
功能本质相当于@ResponseBody+@Controller的组合,标记一个类,表明该类是一个控制器单独的注解,仅控制方法返回作为响应
使用场景整个类都需要返回数据,一次注解,全类方法生效类用@Controller时,个别方法需要返回数据,逐个方法标记
视图解析不会走视图解析,直接返回数据不会走视图解析,直接返回数据

@RestController就像老师在班群里面通知消息,而@ResponseBody相当于老师个别针对几个同学私信通知消息。

返回HTML片段代码

 @RequestMapping("/4")@ResponseBodypublic String method4(){return "

我是一级标题

";}

看一下结果

不是说好的,@ResponseBody是原样返回字符串吗,为什么这次不是!!!

这里解释一下:是因为浏览器会自动解析html,造成一种“不是原样”返回的错觉。

浏览器收到响应后,发现响应头里的Content-type是text/html(Spring自动推断的),就会按照html的规则进行渲染。

如果想让浏览器不解析,直接显示原样,应该怎么写?

这里需要设置Content-type

可以强制让响应方法变为纯文本,给方法加produces=“text/plain”

代码:

 @RequestMapping(value = "/5",produces = "text/plain")@ResponseBodypublic String method5(){return "

我是一级标题

";}

结果:

返回JSON

UserInfo

public class UserInfo {private String name;private int age;public UserInfo(){}public UserInfo(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "UserInfo{" +"name='" + name + '\'' +", age=" + age +'}';}
}

返回json对象代码:

 @RequestMapping("/6")@ResponseBodypublic UserInfo method6(){UserInfo userInfo=new UserInfo("lisi",13);return userInfo;}

结果:

状态码

状态码的定义

状态码是http协议中,服务器响应请求时返回的三位数数字,用来快速告知客服端“请求处理结果”,就是请求结果的快捷反馈

分类:

  • 1xx:服务器已收到请求,需继续处理(如100Continue让客户端继续发数据)
  • 2xx:请求成功(200 OK表示请求完成,201 Created表示资源创建成功)
  • 3xx:需客户端进一步操作(301永久重定向,302临时重定向)
  • 4xx:客户端请求有误(400请求语法错误、401需登入、403没权限、404资源找不到)
  • 5xx:服务器处理出错(500服务器内部故障、503服务器忙/维护中)

设置状态码

代码:

 @RequestMapping("/7")@ResponseBodypublic String method7(HttpServletResponse response){response.setStatus(401);return "设置状态码成功";}

结果:

设置header

代码:

@RequestMapping("/8")@ResponseBodypublic String method8(HttpServletResponse response){response.setHeader("headerkey","headervalue");return "设置header成功";}

结果

综合性练习

练习1:

加法计算器

前端代码:

Document

计算器

数字1:
数字2:

前后端交互接口

服务器代码:

@RestController
@RequestMapping("/calc")
public class CalcController {@RequestMapping("/sum")public String method8(Integer num1,Integer num2){//如果有其中一个没有参数,直接返回if(num1 == null || num2 ==null){return "参数不合法";}Integer sum=num1+num2;return "

计算机结果:" + sum + "

";} }

练习2:

用户登入

我们需要一个前端的输入信息登入界面,然后向后端发送请求进行校验,查询当前账号是否正确。随后在有一个登入状态,展示当前登入的用户名。

1.前端登入页

功能:提供输入框页面,以及通过点击按钮像后端发送请求,进行前后端的交互

登录页面

用户登录

用户名:
密码:
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script><script>function login(){//获取前端数据发送给后端,到时候后端进行校验//1.请求方式//2.后端地址//3.前端数据//使用jQuery的ajax方法发送请求$.ajax({//请求类型type: "post",//请求后端接口地址url: "/user/login",//要发送到后端的数据data: {//获取输入框的值userName: $("#userName").val(),password: $("#password").val()},//返回后端校验后的结果//成功跳转页面//失败,进行错误提示//http请求成功的回调函数//success:是ajax专门为成功响应设计的回调,会自动接收后端返回的正常结果success: function(result){//判断后端返回的结果if(result){//如果登入成功,跳转页面location.href="index2.html";}else{//否则,返回错误提示alert("密码错误");}}})}</script>

2.后端控制器

功能:提供两个接口,进行接口的校验,查询当前的登入状态。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/user")
@RestController
public class UserController {@RequestMapping("/login")//校验,记录登入状态public Boolean login(String userName, String password, HttpSession session){//参数校验:校验用户名和密码是否为空或者不是空字符串//写法一:
//           if(userName == null || userName == "" || password == null || password == "" ){
//                 return false;
//           }//写法二://StringUtils.hasLength():校验用户名和密码是否为空或者不是空字符串if(!StringUtils.hasLength(userName)  || !StringUtils.hasLength(password)){return false;}//校验用户名和密码是否正确//这里是硬编码,固定用户名为admin和密码为123456,实际数据要从数据库中查询验证if("admin".equals(userName) &&  "123456".equals(password)){//如果校验成功,将用户名存储到会话中session.setAttribute("userName",userName);return true;}return false;}//查询当前登入状态@RequestMapping("/getLoginUser")public String getLoginUser(HttpSession session){//获取会话中存储的值//如果用户未登入,返回null//如果用户已登入,返回用户名String userName=(String) session.getAttribute("userName");return userName;}
}

前端首页

功能:查询登入状态,展示用户的登入名

用户登录首页登录人: <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.7.1.min.js"></script><script>$.ajax({url: "/user/getLoginUser",type: "get",//请求成功后的回调函数success: function(userName){//将结果填充到页面$("#loginUser").text(userName);}});</script>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析:HTML炫酷烟花⑨

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

专为不同肤质定制:2025年油皮、干皮、敏感肌最爱的氨基酸洗面奶榜单

面对市场上琳琅满目的洁面产品,你的选择困难症是否又犯了?据2025年《中国美妆消费品牌选择报告》显示,超82%消费者在洗面奶选择上陷入困境——38%因“错信网红款”踩雷,油皮买了假氨基酸洁面越洗越油,敏感肌用了含…

2025年度裁断机厂商排名,裁断机厂家哪家售后好

为帮助软性材料加工企业快速锁定适配的裁断设备合作伙伴,避免选型失误导致产能浪费,我们从技术精度(如定位误差、多材料适配性)、产能交付(规模化生产能力、订单响应速度)、专用场景解决方案(特殊材料裁切、定制…

2025年12月昆明自媒体/短视频运营公司前五榜单推荐

2025年,昆明自媒体行业在数字化转型和AI技术驱动下蓬勃发展,市场规模预计增长15%以上,企业需求聚焦于内容创意、视频剪辑和精准推广。本文基于权威数据和用户评价,为您提供2025年昆明自媒体服务公司排名榜单,并附…

轻质碳酸钙生产厂哪家专业?哪家售后服务优?求推荐

在工业生产领域,轻质碳酸钙作为一种关键的功能性辅料,被广泛应用于管材、电缆、鞋材、涂料等多个行业。那么,轻质碳酸钙生产厂哪家专业、哪家定制靠谱且售后好呢?接下来我们一同深入探讨。 轻质碳酸钙的行业优势与…

xxl-job打包出现Could not determine gpg version异常

mvn package install -DcreateChecksum=true -DskipTests

冰蓝科技正式发布全新纯前端文档编辑产品 —— Spire.WordJS

Spire.WordJS 是一款无需安装的在线 Word 编辑器,基于现代前端技术构建,支持主流浏览器直接打开和编辑文档。产品采用纯 Web 架构,无需本地插件或 ActiveX,仅通过浏览器即可实现文档的查看、编辑、批注和协作,大幅…

第一天敏捷冲刺博客

一、作业基本信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/1348…

高德接口调用-逆地理编码解析-纯前端js实现方案

高德接口调用-逆地理编码解析-纯前端js实现方案话不多说,上步骤实现,先别问为啥,做就完事了。 实现手段上有两种,一种是script标签引入sdk(此处不做介绍),第二种使用高德AsMap包安装npm包npm i @amap/amap-jsap…

斐讯盒子T1_S912B芯片_安卓7.1.2或安卓9.0_线刷固件包 - 指南

斐讯盒子T1_S912B芯片_安卓7.1.2或安卓9.0_线刷固件包 - 指南2025-12-01 14:42 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !import…

2025工业级柠檬酸生产厂商TOP5权威推荐:工业柠檬酸钠批

化工行业作为国民经济的基础产业,其原料供应的稳定性与品质直接决定了下游制造业的发展质量。2024年数据显示,仅湖南省化工原料市场规模已突破300亿元,其中柠檬酸、柠檬酸钠等无机化学品因广泛应用于食品、环保、矿…

2025年北京天津河北上海江苏印刷精品定制公司推荐:专业的印

本榜单依托环渤海及长三角区域市场调研与真实客户口碑,深度筛选出五家聚焦印刷精品定制的标杆企业,为企业精准匹配专业的印刷供应商提供客观依据,助力品牌通过纸制品实现价值升级。 TOP1 推荐:辉昂纸质品有限公司 …

深圳市退社保费,需要上传文件的模板

深圳市退社保费,需要上传文件的模板 越努力,越幸运!!! good good study,day day up!!!

2025成都网络推广公司服务能力大比拼,抖音代运营/GEO优化/网络推广公司推荐

行业权威榜单发布,优质服务商深度解析 随着数字经济的蓬勃发展,成都作为西部重要的经济中心,网络推广服务行业呈现出蓬勃发展的态势。本文基于市场调研数据、企业服务案例及客户反馈,对成都地区五家具有代表性的网…

SDIO协议

一.SDIO协议简介 SDIO协议三要素:命令(Command),响应(Response)和数据(Data)。 1.1 Command 命令就是一个标记,用于发起一个操作,由HOST发送,DEVICE接收,命令在 CMD 线上是连续传输的,命令的长度为48位。…

哪个品牌的袋式过滤器好?行业内的几个可靠选择

袋式过滤器作为工业生产中常用的过滤设备,凭借其高效的过滤性能和灵活的适配性,在多个领域的流体处理环节中发挥着重要作用。其通过滤袋截留杂质的设计,能够有效去除流体中的颗粒物,提升后续生产环节的原料纯度,选…

top flow

数模混合的模块,layout需要现将数字的def给到pr。一:经常会有顶层线net和dig_top内部pin名字不一样的情况,这个时候就需要飞pin。飞pin flow: 1.在顶层需要xl正确,带net信息的metal到dig_top boundary边缘。 2.创…

记前端项目定位实现过程

记前端项目定位实现过程背景: 一个前端h5项目,需要内嵌到企业微信工作台上使用,项目中有获取定位信息的要求实现过程:① 第一次:目标实现方式是调用高德,使用高德地图来获取经纬度,使用获得的经纬度来获…

裁断机厂家选哪家好?裁断机服务商价格哪个合理?

在软性材料裁切领域,企业对高精度、高适配性裁断设备的需求日益迫切。2024年数据显示,国内裁断机市场规模突破60亿元,年增速达18%,但32%的企业反馈设备存在精度不稳定、专用性不足、售后响应慢等问题——汽车内饰厂…

2025年下半年徐州旅游租车/商务车租车/大巴车包车公司前十推荐

随着2025年下半年旅游市场的持续复苏,旅游租车行业迎来新的发展机遇。本文基于市场调研和用户反馈,整理出十家值得推荐的旅游租车服务平台,排名不分先后,旨在为消费者提供参考选择。特别说明:本文推荐仅代表第三方…