当前位置: 首页 > news >正文

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.lryc.cn/news/588462.html

相关文章:

  • 力扣-138.随机链表的复制
  • 一分钟K线实时数据数据接口,逐笔明细数据接口,分时成交量数据接口,实时五档委托单数据接口,历史逐笔明细数据接口,历史分时成交量数据接口
  • 深入理解MyBatis延迟加载:原理、配置与实战优化
  • 美丽田园发布盈喜公告,预计净利增长超35%该咋看?
  • 现场设备无法向视频汇聚EasyCVR视频融合平台推流的原因排查与解决过程
  • CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG
  • 第十五节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门 - vue前端 生产部署
  • Laravel 中 chunk 分页漏掉数据?深度解析原因与解决方案
  • Unity3D + VS2022连接雷电模拟器调试
  • 4、qt窗口(沉淀中)
  • iOS APP 上架流程:跨平台上架方案的协作实践记录
  • ConcurrentHashMap 原子操作详解:computeIfAbsent、computeIfPresent和putIfAbsent
  • C语言-数据输入与输出
  • 《甘肃棒球》国家级运动健将标准·棒球1号位
  • c#进阶之数据结构(动态数组篇)----Queue
  • Javaweb使用websocket,请先连上demo好吧!很简单的!
  • Vim库函数
  • 【DOCKER】-4 dockerfile镜像管理
  • 纯C++11实现!零依赖贝叶斯情感分析系统,掌握机器学习系统工程化的秘密!
  • 学习 Flutter (三):玩安卓项目实战 - 上
  • 机器学习、深度学习、神经网络之间的关系
  • redis配置(Xshell连接centos7的基础上)
  • Mysql数据库学习--多表查询
  • Python中使用Re模块TypeError: cannot use a string pattern on a bytes-like object 解决办法
  • Leaflet面试题及答案(81-100)
  • 九、官方人格提示词汇总(中-1)
  • 项目进度图不直观,如何优化展示方式
  • Go泛型完全指南:从基础到实战应用
  • 进程---基础知识+命令+函数(fork+getpid+exit+wait+exec)
  • iOS —— 网易云仿写