SpringMVC2

一、接口声明的稳定性

 

- 接口声明不能轻易变:接口是前后端、服务间通信的约定。要是接口的 URL、请求方法、参数、返回值变了,调用方(比如前端、其他服务)就得跟着改,容易出问题。所以设计接口要谨慎,别老变动。

 

二、SpringMVC 接口示例

 

- 请求 URL: http://127.0.0.1:8080/request/6&sa=lyb_n_homepage 

-  127.0.0.1  是本地地址, 8080  是 Tomcat 端口, /request/6  是 URL 路径, sa=lyb_n_homepage  是查询参数( sa  是参数名, lyb_n_homepage  是参数值)。

- Controller 代码:

@RequestMapping("/rs")

public String rc(@RequestParam("sa") String resource) {

    return "接收到参数 resource: " + resource;

}

 

 

-  @RequestMapping("/rs") :把  /rs  路径映射到这个方法,支持 GET、POST 等请求。

-  @RequestParam("sa") :把请求中名为  sa  的参数绑定到  resource  变量。

- 必传 vs 非必传:默认  required = true (必传),如果改成  @RequestParam(value = "sa", required = false) ,就是非必传,没传  sa  参数也不会报错。

- 返回值:方法返回字符串,会直接返回给客户端(比如浏览器显示“接收到参数 resource: lyb_n_homepage”)。

 

三、JSON 与 Java 对象转换库

 

- Jackson:SpringBoot 默认的 JSON 处理库,能把 Java 对象转成 JSON,也能把 JSON 转成 Java 对象。

- Fastjson/Fastjson2:阿里巴巴出的库,性能好,API 简单,很多企业在用。

- Gson:Google 出的库,功能全,也很好用。

 

四、网络编程与 SpringMVC 注解

 

网络编程三步骤

 

1. 客户端和服务端建立连接:比如浏览器和 Tomcat 服务器通过 TCP 三次握手建立连接。

2. 客户端发请求:浏览器发 HTTP 请求(包含 URL、请求方法、头信息、参数等)。

3. 服务端收请求并响应:Tomcat 收请求,SpringMVC 处理,再返回响应(比如 HTML 页面、JSON 数据)。

 

@RequestMapping 注解

 

- 作用:既可以标记类,也可以标记方法,用来映射 URL 路径。

- 标记类:类上的  @RequestMapping  是父路径,方法上的是子路径,组合起来就是完整的 URL。

- 标记方法:直接映射方法到 URL。

- 支持的请求方法:默认支持 GET、POST 等,也可以用  method  属性指定(比如  method = RequestMethod.GET  只支持 GET)。

- 路径不能重复:如果有两个相同的 URL 映射,启动时会报  Ambiguous mapping  错误(比如两个方法都映射到  /hello )。

 

请求方法不支持的错误

 

- 错误信息:

- 日志: Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported] 

- 页面: Whitelabel Error Page ,状态码 405(Method Not Allowed)。

- 原因:比如接口只支持 GET,你用 POST 请求,就会报这错。

 

@RequestMapping 的属性

 

- value 属性:指定 URL 路径,是默认属性。如果注解里只有  value ,可以省略  value = ,比如  @RequestMapping("/hello") 。

- method 属性:指定支持的请求方法,比如  RequestMethod.GET 、 RequestMethod.POST 。

- 示例:

-  @RequestMapping(value = "/v1", method = RequestMethod.GET) :只支持 GET 请求,路径是  /v1 。

-  @RequestMapping(value = "/v2", method = {RequestMethod.GET, RequestMethod.POST}) :同时支持 GET 和 POST 请求。

 

五、参数绑定问题

 

- 类型转换错误:比如方法参数是  int age ,但请求没传  age ,或者传了非数字,会报  NumberFormatException  或  MethodArgumentTypeMismatchException 。

- 解决:把参数类型改成包装类(比如  Integer age ),这样没传参数时  age  是  null ,不会报错。

- 参数顺序无关,名称要一致:方法参数名要和请求参数名一致,顺序没关系。比如方法  public String test(String name, String password) ,请求参数  name=zhangsan&password=123  能正确绑定,改成  password=123&name=zhangsan  也能绑定。

 

六、总结

 本节从接口设计、SpringMVC 注解、JSON 转换到网络编程基础、参数绑定,把 Web 开发的核心知识点串了起来。理解这些内容,能帮你搞定接口开发、前后端联调、错误排查等问题,在实际项目中少踩坑。

 

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

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

相关文章

LVS集群实践

一、LVS概念VS: Virtual Sever (调度器)RS: Real Sever (资源主机)CIP: Client IP (用户IP)VIP: Virtual sever IP (VS外网的IP,客户访问的IP)DIP: Director IP &#xf…

使用Django框架构建Python Web应用

前言Django个高级Python Web框架,遵循MTV(Model-Template-View)设计模式:模型(Model):数据层,定义数据结构模板(Template):表现层,处理用户界面视图(View):业务逻辑层&am…

[AI-video] 数据模型与架构 | LLM集成

第五章:数据模型与架构 欢迎来到第五章! 在前几章中,我们学习了网页用户界面(UI)(控制面板)、应用配置(系统参数设置)、任务编排(视频生成流程的总调度&…

HTTP 性能优化实战:突破高并发瓶颈的工业级方案

在互联网高并发场景中,HTTP 性能表现直接决定系统生死。当每秒请求量突破十万级甚至百万级时,哪怕 100 毫秒的延迟都会引发用户流失、交易失败等连锁反应。本文基于五大行业实战案例,拆解 HTTP 性能瓶颈的底层逻辑,输出可直接落地…

Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率

随着人工智能与机器人技术的深度融合,人形机器人正从实验室走向工业制造、医疗护理、公共服务等真实场景。然而,要让机器人真正"像人类一样工作",其动作的流畅性、精准度与环境适应性仍是技术突破的关键。Xsens动作捕捉系统通过创新…

IIS网站间歇性打不开暴力解决方法

背景 网站使用 Asp.NET 框架开发,使用 SQL Server 2012 IIS 8.5 运行。开发上线以后,经常出现网站间歇性打不开,但是重启 IIS 就可以正常访问。 问题排查过程 打开日志记录 观察 CPU,内存,带宽流量等占用正常&#xf…

JavaScript 动态访问嵌套对象属性问题记录

问题描述不能解析 2 层 只能解析一层在 Vue 项目中,尝试通过动态路径(如 otherInfo.businessPlacePhotoUrlLabel)访问或修改嵌套对象属性时,发现 this[a.b.c] 无法正确解析,导致返回 undefined。错误示例removeImg(val…

7.17 滑动窗口 | assign

lc3015.法1&#xff1a;暴力bfs&#xff0c;数据范围only 100&#xff0c;可以过法2&#xff1a;加入了x,y&#xff0c;可以思考加入的x,y影响了什么呢? 通过数学找规律class Solution { public:vector<int> countOfPairs(int n, int x, int y) {vector<int> ret(…

预训练模型:大规模数据预学习范式——定义、原理与演进逻辑

本文由「大千AI助手」原创发布&#xff0c;专注用真话讲AI&#xff0c;回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我&#xff0c;一起撕掉过度包装&#xff0c;学习真实的AI技术&#xff01; 以下基于权威教材、学术论文及行业技术报告&#xff0c;对“预训练模型…

【kubernetes】--安全认证机制

文章目录安全认证1. **身份认证&#xff08;Authentication&#xff09;**2. **授权&#xff08;Authorization&#xff09;**3. **准入控制&#xff08;Admission Control&#xff09;**4. **机密信息管理**5. **其他安全实践**安全认证 Kubernetes 的安全机制覆盖了从身份验…

扣子工作流详解

《扣子开发AI Agent智能体应用&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;王东健&#xff0c;陈铭毅&#xff0c;程东升)【摘要 书评 试读】- 京东图书 《扣子开发AI Agent智能体应用》案例重现 开发agent智能体的书籍-CSDN博客 工作流是指一系列相互关联…

【一文解决】块级元素,行内元素,行内块元素

块级元素&#xff0c;行内元素&#xff0c;行内块元素&#xff01;盒模型1.标准盒模型&#xff08;box-sizing: content-box&#xff09;2.IE 盒模型&#xff08;box-sizing: border-box&#xff09;&#xff01;margin & padding1.margin、padding是什么2. 应用一、块级元…

在 Spring Boot 中使用 MyBatis 的 XML 文件编写 SQL 语句详解

前言 在现代 Java Web 开发中&#xff0c;Spring Boot 和 MyBatis 是两个非常流行的技术框架。它们的结合使得数据库操作变得更加简洁和高效。本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句&#xff0c;包括配置、代码结构、SQL 编写技巧以…

字段级权限控制场景中,RBAC与ABAC的性能差异

RBAC(基于角色访问控制)与ABAC(基于属性访问控制)的性能差异主要体现在​​计算复杂度、策略灵活性、扩展性​​和​​资源消耗​​等方面。以下是具体对比分析: ​​一、性能对比维度​​ ​​维度​​​​RBAC​​​​ABAC​​​​计算复杂度​​低(预计算角色权限映射…

Reddit Karma是什么?Post Karma和Comment Karma的提升指南

在Reddit这一用户活跃度高的社区里&#xff0c;想要获得更好的曝光&#xff0c;我们就需要提升我们的Karma值&#xff0c;什么是Reddit Karma&#xff1f;怎么样才能提升以获得更大的影响力&#xff1f;本文将为你提高一套切实可行的提升方案。一、什么是Reddit Karma&#xff…

基于Canal实现MySQL数据库数据同步

一、基础概念与原理 1. Canal是什么&#xff1f; 阿里巴巴开源的MySQL binlog增量订阅与消费组件&#xff0c;通过伪装为MySQL Slave监听Master的binlog变更&#xff0c;实现实时数据同步。 Canal 官方网站&#xff1a;https://github.com/alibaba/canal Canal Demo&#x…

算法第23天|贪心算法:基础理论、分发饼干、摆动序列、最大子序和

今日总结&#xff1a; 摆动序列的三种特殊情况需要着重思考&#xff0c;感觉是没有思考清楚 基础理论 1、贪心的本质&#xff1a; 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 例如&#xff1a;一堆钞票&#xff0c;只能拿走10张&#xff0c;如何拿走最…

Q-chunking——带有动作分块的强化学习:基于人类演示,进行一定的连贯探索(且可做到无偏的n步价值回溯)

前言 我在之前的文章中提到过多次&#xff0c;长沙具身团队是我司建设的第二支具身团队&#xff0c;通过5月份的全力招聘&#xff0c;为了冲刺6月底和7月初来长沙办公室考察的第一批客户&#xff0c;过去一个多月来&#xff0c;长沙分部(一开始就5人&#xff0c;另外5人 实习…

NW956NW961美光固态闪存NW964NW968

美光固态闪存深度解析&#xff1a;NW956、NW961、NW964与NW968的全方位评测一、产品概述与市场定位在当今数据爆炸的时代&#xff0c;固态硬盘&#xff08;SSD&#xff09;作为存储领域的佼佼者&#xff0c;其性能与稳定性成为了用户关注的焦点。美光&#xff08;Micron&#x…

C++修炼:IO流

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《C修炼之路》、《Linux修炼&#xff1a;终端之内 洞悉真理…