表单提交时name属性必须与Java形参名严格一致(大小写敏感),Spring MVC默认通过name绑定参数;中文乱码需配置UTF-8编码;GET参数需JS端encodeURIComponent编码,敏感信息禁用GET。

form 表单提交时 name 属性必须和 Java 形参名严格匹配
Spring MVC 默认靠 name 属性做参数绑定,不是 id,不是 class,也不是标签文本。如果表单里写 ,而 Java 方法形参是 String username(小写 u),就收不到值——大小写敏感,且不自动驼峰转换。
- 确保 HTML 的
name值与 Controller 方法中形参名完全一致(包括大小写) - 避免用下划线命名(如
user_name),除非你配了@InitBinder或自定义PropertyEditor - 复选框、多选下拉等批量数据,Java 形参得用
List或数组(如String[] hobbies),且多个才能聚合成一个参数
@RequestParam 和 @ModelAttribute 的选择取决于数据结构
简单字段(字符串、数字、布尔)直接用 @RequestParam;对象属性多、字段成组(比如用户注册表单含 name/email/age),更适合封装为 Java Bean + @ModelAttribute。后者会自动调用 setter,但要求 Bean 有无参构造器,且字段名仍需和 name 对齐。
-
@RequestParam("email") String email:适合单个字段,或 URL 查询参数(GET) -
@ModelAttribute User user:表单所有name匹配User类的字段名(如name="age"→user.setAge(...)) - 如果用了
@ModelAttribute却收不到值,先检查类里是否有对应字段的 public setter 方法
中文乱码问题基本都出在 Tomcat 配置或请求头缺失
POST 提交中文变 ? 或乱码,90% 是没设请求编码。Spring Boot 内置 Tomcat 默认用 ISO-8859-1 解析 POST body,但浏览器通常按 UTF-8 发送。
- Spring Boot 2.3+:在
application.properties加server.servlet.encoding.charset=UTF-8和server.servlet.encoding.force=true - 传统 Spring MVC(web.xml):必须配
CharacterEncodingFilter,且 filter-mapping 要在所有其他 filter 之前 - 前端别漏掉
,虽然不影响 POST 主体,但影响开发者调试时看源码的可读性
GET 请求参数过长或含特殊字符要额外处理
URL 长度有限制(各浏览器不同,一般 2000 字符左右),且空格、&、=、/ 等会被截断或解析失败。直接拼接 ?name=张三&city=北京 很危险。
立即学习“Java免费学习笔记(深入)”;
- GET 参数一律用
encodeURIComponent()编码(JS 端),后端@RequestParam会自动解码 - 含 JSON、HTML 片段、长文本的场景,改用 POST +
application/x-www-form-urlencoded - 不要在 GET 中传敏感信息(密码、token),URL 可能被日志、代理、浏览器历史记录留存











