SpringMVC2

一、接口声明的稳定性

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

二、SpringMVC 接口示例

  • 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 开发的核心知识点串了起来。理解这些内容,能帮你搞定接口开发、前后端联调、错误排查等问题,在实际项目中少踩坑。

相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
好奇龙猫6 小时前
【AI学习-comfyUI学习-第三十节-第三十一节-FLUX-SD放大工作流+FLUX图生图工作流-各个部分学习】
人工智能·学习
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
saoys6 小时前
Opencv 学习笔记:图像掩膜操作(精准提取指定区域像素)
笔记·opencv·学习
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
C_心欲无痕6 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫6 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java