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

【SpringMVC】详解参数传递与实战指南


目录

1.前言

2.正文

2.1基础参数传递

2.1.1单参数

2.1.2多参数

2.2对象参数绑定

2.2.1自动封装对象

2.2.2参数别名处理

2.3集合类型处理

2.3.1数组接收

2.3.2List集合接收

2.4JSON参数处理

2.4.1介绍JSON

2.4.2传递JSON参数

2.5RESTful风格参数

2.6文件上传处理

2.7完整调试代码

3.小结


1.前言

哈喽大家好吖,在SpringMVC开发中,参数传递是开发者每天都要面对的核心问题。不同的业务场景需要采用不同的参数接收方式,合理的参数处理能大幅提升开发效率和代码质量。本文将通过一个完整的RequestController案例,详解10种常见参数传递方式,助你彻底掌握SpringMVC参数传递技巧。

2.正文

官方文档:Spring Framework Documentation :: Spring Frameworkhttps://docs.spring.io/spring-framework/reference/

2.1基础参数传递

2.1.1单参数

@RequestMapping("/r1")
public String r1(String keyword){return "接收参数:" + keyword;
}
  • 调用示例/request/r1?keyword=spring

  • 特点

    • 参数名与方法参数名严格匹配

    • 自动完成基本类型转换(String→int等)

    • 若参数不存在会注入null

2.1.2多参数

@RequestMapping("r2")
public String r2(String name, int id){return "receive:" + name + id;
}
  • 调用示例/request/r2?name=Alice&id=1001

  • 注意事项

    • 基本类型参数不能为null(如int)

    • 推荐使用包装类型Integer避免空指针异常

避免空指针:

@RequestMapping("r3")public String r3(Integer number){return "receive" + number;}

2.2对象参数绑定

2.2.1自动封装对象

@RequestMapping("r4")
public String r4(student s1){return "receive" + s1.toString();
}
  • 调用示例/request/r4?id=1002&name=Bob

  • 实现机制

    1. Spring自动创建Student实例

    2. 通过setter方法进行属性注入

    3. 支持嵌套对象属性绑定

2.2.2参数别名处理

@RequestMapping("/r5")
public String r5(@RequestParam(value = "n", required = false)String name){return "receive" + name;
}
  • 注解说明

    • value:指定参数别名

    • required:是否必须参数(默认true)

    • defaultValue:默认值设置


2.3集合类型处理

2.3.1数组接收

@RequestMapping("/r6")
public String r6(String[] array){return "receive" + Arrays.toString(array);
}
  • 调用方式

    • /request/r6?array=1&array=2

    • /request/r6?array=1,2,3

2.3.2List集合接收

@RequestMapping("/r7")
public String r7(@RequestParam List<Integer> list){return "receive:" + list;
}
  • 特别注意

    • 必须使用@RequestParam注解

    • 禁止使用ArrayList等具体实现类

    • 推荐使用包装类型避免转型异常

2.4JSON参数处理

2.4.1介绍JSON

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于纯文本,使用Unicode编码,具有广泛的兼容性和灵活性,常用于网络应用之间的数据传输。


JSON格式以键值对的形式组织数据,支持两种主要的数据结构:

对象(Object)

  • 一个无序的键值对集合,用大括号“{}”括起来。

  • 键(Key)必须是字符串类型,值(Value)可以是字符串、数值、布尔值、数组、对象或null

  • 键与值之间用英文冒号“:”分隔,键值对之间用英文逗号“,”分隔。

  • 例如:

    {"name": "Kimi","age": 25,"isStudent": false,"hobbies": ["reading", "traveling"],"address": {"city": "Beijing","country": "China"}
    }

数组(Array)

  • 一个有序的值集合,用方括号“[]”括起来。

  • 数组中的值可以是任意类型,包括字符串、数值、布尔值、对象、数组或null

  • 数组中的值之间用英文逗号“,”分隔。

  • 例如:

    ["apple",123,true,null,{"key": "value"},[1, 2, 3]
    ]

在SpringMVC中,JSON参数的自动转换依赖于HttpMessageConverter体系。当检测到请求的Content-Typeapplication/json时,框架会使用MappingJackson2HttpMessageConverter进行数据绑定。

处理流程

  1. 前端发送JSON格式请求体

  2. DispatcherServlet选择匹配的消息转换器

  3. Jackson库将JSON反序列化为Java对象

  4. 通过@RequestBody注入方法参数

2.4.2传递JSON参数

@RequestMapping("/r8")
public String r8(@RequestBody student student1){return student1.toString();
}
  • 请求要求

    • Content-Type必须为application/json

    • 需要Jackson依赖支持

    • 支持嵌套复杂对象解析

  • 请求示例

    {"id": 1003, "name": "Carol"}

2.5RESTful风格参数

@RequestMapping("/path/{pathid}")
public String r9(@PathVariable Integer pathid){return "获取路径id" + pathid;
}
  • 调用示例/request/path/1004

  • 最佳实践

    • 适合资源定位场景

    • 支持正则表达式校验

    • 可配合@GetMapping等注解使用

2.6文件上传处理

@RequestMapping("/r10")
public String r10(MultipartFile file) throws IOException {file.transferTo(new File("D:\\桌面\\" + file.getOriginalFilename()));return "文件上传成功";
}
  • 表单需设置enctype="multipart/form-data"

  • 支持多文件同时上传

  • 注意文件存储路径权限问题

2.7完整调试代码

package com.example.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.List;class student{int id;String name;public student() {}public student(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return super.toString();}
}@RequestMapping("/request")
@Controller
@ResponseBody
public class RequestController {@RequestMapping("/r1")public String r1(String keyword){return "接收参数:" + keyword;}@RequestMapping("r2")public String r2(String name, int id){return "receive:" + name + id;}@RequestMapping("r3")public String r3(Integer number){return "receive" + number;}@RequestMapping("r4")public String r4(student s1){return "receive" + s1.toString();}//从前端接受参数n,赋值给name@RequestMapping("/r5")public String r5(@RequestParam(value = "n", required = false)String name){return "receive" + name;}//传递数组@RequestMapping("/r6")public String r6(String[] array){return "receive" + array.toString();}//传递集合@RequestMapping("/r7")public String r7(@RequestParam List<Integer> list){return "receive:" + list;}//传递json@RequestMapping("/r8")public String r8(@RequestBody student student1){return student1.toString();}//从URL中获取参数@RequestMapping("/path/{pathid}")public String r9(@PathVariable Integer pathid){return "获取路径id" + pathid;}//上传文件@RequestMapping("/r10")public String r10(MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("D:\\桌面\\" + file.getOriginalFilename()));return "文件上传成功";}}

3.小结

今天的分享到这里就结束了,喜欢的小伙伴点点赞点点关注,你的支持就是对我最大的鼓励,大家加油!

相关文章:

  • Linux系统管理与编程14:Shell变量及定制bash登录界面
  • LLM - Large Language Model
  • 迈瑞医疗一季度业绩环比大幅改善 国内业务将从今年三季度迎来重大拐点
  • AIGC重构元宇宙:从内容生成到沉浸式体验的技术革命
  • TypeScript之基础知识
  • 基于常微分方程的神经网络(Neural ODE)
  • XrayR启动失败
  • 如何查看电脑电池使用情况
  • 嵌入式开发面试典型编程题解析:排序算法、指针操作、字符处理、递归原理等基础原理的深度解析。
  • VS2022+OpenCasCade配置编译
  • C++ —— 正向迭代器与反向迭代器
  • 在服务器中,搭建FusionCompute,实现集群管理
  • KML文件转shp并保留关键字段
  • 【KWDB 创作者计划】_KWDB产品技术解读
  • 【C语言】初阶算法相关习题(二)
  • mapbox V3 新特性,室内楼层多层同时三维展示(可单层切换),类似蜂鸟视图效果
  • 第7讲:图例与标题规范(字号、位置、字体选择技巧)
  • Excel处理控件Aspose.Cells for Go :通过 C++ 实现的设计概念和 API 架构讲解
  • 关于kafka
  • 使用exdp 备份数据库
  • 餐饮店直播顾客用餐,律师:公共场所并非无隐私,需对方同意
  • 广东一公司违规开展学科培训被罚没470万,已注销营业执照
  • 凝聚多方力量,中国农科院油菜产业专家团部署单产提升新任务
  • 加拿大温哥华发生驾车冲撞人群事件,加拿大总理发声
  • 孟泽:我们简化了历史,因此也简化了人性
  • 新华时评:坚定不移办好自己的事,着力抓好“四稳”