Spring Boot Web开发入门-请求与响应

前端浏览器发起请求,会携带HTTP请求数据,HTTP服务器(Tomcat)负责对请求数据进行解析,然后将解析好的数据封装到HttpServletRequest对象中。此后,应用程序对该对象中的数据进行处理。最后,Tomcat服务器需要根据响应数据的规定格式,通过HttpServletResponse对象设置相应数据,然后产生响应信息返回给浏览器。spring boot框架提供了DispatcherServlet前端控制器,让业务逻辑程序开发者可以专注于开发Controller部分的代码。

综上所述:

  • 请求:获取请求数据。
  • 响应:设置响应数据。

首先关注如何从请求数据中获取各种参数。

  1. 简单参数,Java提供的简单类型。controller中定义的函数的参数是前面提到的。通过最原始的方式获取请求参数,需要通过HttpServletRequest对象(函数的参数)手段获取,由于所有参赛都是字符串类型,所以还需要进行解析和类型转换,比较麻烦。spring框架提供了更方便的方法,只要定义controller方法的形参的参数遍历名与请求参数的参数名一致,就可以自动接收到对应的参数,而且会自动进行类型转换。如果名字不一致,获取到的参数就会是null值,如果没办法修改名字,可以通过@RequestParam手动映射名字。该注解还有另一个参数required,表示该参数必须传递(不传递将报错),该参数可选,且默认值为true

  2. 实体参数,Java简单实体对象POJO。类似地,定义请求参数名与对象定义的属性名一致,就可以自动接收参数并封装成对应的对象。

  3. 数组集合参数,Java数组或Java集合类型的参数。对于数组,请求参数名与数组名一致就行;对于Java集合,不仅需要名字一致,还需要在函数形参前面使用@RequestParam注解来绑定参数关系。

  4. 日期时间参数,比如Java的LocalDateTime类型。需要通过@DateTimeFormat注解指定字符串表示时间的pattern。

  5. json参数。注意json参数必须设置为post请求,因为json参数是通过请求体传递的,而get请求没有请求体。json参数的接收一般通过定义的实体对象,保证json的key名与形参的类对象的属性名相同,此外还需要在形参前面加上@RequestBody注解。

  6. 路径参数,参数是请求url的一部分。在定义mapping的url的时候使用{...}类标识该参数,内部写明名字,然后在方法的形参前面使用@PathVariable注解表明该参数从url中获取。当然,形参名要与请求参数名一致。注意,可以从url中获取多个路径参数。

下面讲响应数据。

controller方法返回的数据可以直接是字符串,也可以是对象或集合,并不是前面所讲的HttpServletResponse,原因在于在类或方法上使用了@RestController注解,该注解是@Controller@ResponseBody两个注解,后者的作用是将方法返回值直接响应给前端,当返回值类型是实体对象类型或Java集合,就会转换成json格式再响应。

可以发现响应数据的形式很多样,可能是字符串、对象、集合等等,实践中可以定义一个统一的响应结果类,controller方法可以返回响应结果对象供前端解析。

public class Result {private Integer code;  // 响应码private String msg;  // 响应信息private Object data;  // 响应数据
}

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

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

相关文章

《高效能人士的七个习惯》

情感账户 勇气和体谅 大石头 自传式回应、同理心倾听:用你的话反映他们的感受和意思,而不是去评论、去判断是否正确

高效能人士的七个习惯

情感账户 勇气和体谅 大石头 自传式回应、同理心倾听:用你的话反映他们的感受和意思,而不是去评论、去判断是否正确

新春“码”启 | Cocos 3D 微信小游戏(第5天):分包构建和上传发布(完美收官)

新春开发 Cocos 3D 微信小游戏计划的第 5 天,详细介绍了如何利用Cocos Creator开发并发布一款3D微信小游戏,包括游戏状态机的设计理念,和微信小游戏主包大小限制时的解决方案——分包策略。从游戏设计、开发、调试到最后成功发布的全过程,为想要进入微信小游戏开发领域的开…

爬虫随笔(一)

爬虫随笔,某牛前几天一直在看js逆向,现在分享一下本人近期学习记录首先分享一个网站,这个网站可以获得request所需要的header和cookie https://curlconverter.com/ 爬取网站就不挂了简单观察发现,该网站是滑动加载,我们可以在滑动加载时获得我们所需要的接口,发现两个链…

Flow-CLI 全新升级,轻松对接 Sonar 实现代码扫描和红线卡点

Flow-CLI 使用的典型场景如:自定义开发一个 Sonar 扫描步骤,以在流水中触发 Sonar 扫描,并以扫描结果作为红线卡点,以保证代码质量;对接三方自有审批平台,在发布前进行检查审批,审批通过才允许发布。场景介绍 Flow-CLI 是云效流水线 Flow 推出的一款命令行工具,帮助用户…

皮克定理

小蓝鸟的面积S=B/2+I-1

两步构建 AI 总结助手,实现智能文档摘要

本次解决方案将向您介绍,如何通过函数计算 FC 阿里云百炼平台搭建智能 AI 总结助手,实现高效的文本自动总结和信息提取。在信息极度丰富的当下,如何从海量且复杂的文件资料中筛选出关键内容,成为了不少企业和个人急需解决的问题。本次解决方案将向您介绍,如何通过函数计算…

自定义桌面——获取天气

最近天气时不时会降温,经常用手机查看天气,感觉好不方便,今天决定把天气的功能添加到“自定义桌面”来,为了免费获取天气数据,竟然花了差不多一天的时间来制作完成。(假如一天人工费几百来算,这样真的值得吗?非常值得!为未来完善功能添砖加瓦打好基础!) 添加天气的功…

2.6 第三张评估表搭建

今天完成了作业中第三张能力评估表的搭建 html界面(部分)如下:以下是前端代码(部分): <body> <h1 style="text-align: center">能力评估</h1> <div id="root" style="border: 1px solid black"><form id="…

V-Control 开箱即用的.NET MAUI组件库发布了!

之前写过挺多的MAUI Sample,其中有很多代码可以打包成组件,当组件完善到一定程度,我会把控件封装起来放到控件库中。 今天,在这个仓库建立一年零八个月后,我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET MAUI,犹豫是否可以拿来作为有生产力的跨平台移动端开发…

国产直升机发展现状及思考

​由于独特的自然环境条件以及当前经济社会发展情况,比较世界上其他发达国家,直升机早已渗入中国城乡建设与经济社会活动的各个环节,例如农林工作、地质勘探、旅游观光、飞机驾驶训练等,直升机对国民经济工程建设起到了重要的作用。 按照我国航空工业技术研究机构的预计,截…

做题随笔:P10451

Solution 题意 原题链接 定义二元关系 \(\text{S}\),其满足反对称性且不满足传递性。 现有互异元素 \(N(N \le 1000)\) 个,可以进行不多于 \(10000\) 次提问,每次提问可以得知两指定元素 \(a,b\) 的 \(a \, \text{S} \, b\) 结果。求序列 \(a_N\) 满足:对任意 \(x_i,x_{i+1…