本文目录导读:

在 Java Web 开发中,接收请求参数的方式取决于你使用的框架(如原生 Servlet、Spring MVC 等),以下是几种常见场景的案例。
原生 Servlet
这是最基础的方式,适用于所有 Java Web 应用。
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet("/params")
public class ParamServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1. 获取单个参数
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
int age = (ageStr != null && !ageStr.isEmpty()) ? Integer.parseInt(ageStr) : 0;
// 2. 获取同名参数(checkbox)
String[] hobbies = request.getParameterValues("hobby");
// 3. 获取所有参数名
Enumeration<String> paramNames = request.getParameterNames();
// 4. 获取参数 Map
Map<String, String[]> paramMap = request.getParameterMap();
}
}
注意:request.getParameter() 返回 String,需要手动进行类型转换(如 Integer.parseInt())。
Spring MVC
1 使用 @RequestParam(单个参数)
import org.springframework.web.bind.annotation.*;
@RestController
public class ParamController {
@GetMapping("/params")
public String getParam(
@RequestParam("name") String name,
@RequestParam(value = "age", required = false, defaultValue = "18") int age,
@RequestParam(value = "hobby", required = false) String[] hobbies) {
// 直接使用参数
System.out.println("name=" + name + ", age=" + age);
return "OK";
}
}
2 使用 Java 对象(实体类)
// 定义实体类
public class UserParam {
private String name;
private int age;
private String[] hobby;
// getter/setter(必须)
}
// Controller 中直接接收对象
@GetMapping("/user")
public String getUser(UserParam user) {
return "name=" + user.getName() + ", age=" + user.getAge();
}
3 接收 JSON 请求体(POST)
@PostMapping("/user/json")
public String createUser(@RequestBody UserParam user) {
return "Created: " + user.getName();
}
对于 POST 请求传递 JSON,前端需要设置 Content-Type: application/json。
文件上传(Spring MVC)
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file,
@RequestParam("description") String desc) {
System.out.println("描述:" + desc);
System.out.println("文件名:" + file.getOriginalFilename());
return "Upload OK";
}
前端表单需要设置 enctype="multipart/form-data"。
在 RESTful 风格中接收路径变量
@GetMapping("/users/{id}")
public String getUserById(@PathVariable("id") Long userId) {
return "User ID: " + userId;
}
请求 URL:GET /users/123
常用技术与要点
| 方式 | 典型应用 | 示例 |
|---|---|---|
| 查询参数 | GET 请求 | ?name=xxx&age=20 |
| 表单参数 | POST 请求(form-urlencoded) |
name=xxx&age=20 |
| JSON 体 | POST/ PUT 请求 | {"name":"xxx","age":20} |
| 路径变量 | RESTful 接口 | /users/123 |
| 文件上传 | 文件提交 | multipart/form-data |
完整案例:Spring Boot 统一接收各种参数
@RestController
@RequestMapping("/demo")
public class DemoController {
// 1. 查询参数
@GetMapping("/query")
public String query(@RequestParam String name, @RequestParam int age) {
return String.format("Query: name=%s, age=%d", name, age);
}
// 2. 表单提交
@PostMapping("/form")
public String form(UserParam user) {
return String.format("Form: name=%s, age=%d", user.getName(), user.getAge());
}
// 3. JSON 提交
@PostMapping("/json")
public String json(@RequestBody UserParam user) {
return String.format("JSON: name=%s, age=%d", user.getName(), user.getAge());
}
// 4. 路径变量
@GetMapping("/path/{id}")
public String path(@PathVariable Long id) {
return "ID=" + id;
}
// 5. 文件上传
@PostMapping("/upload")
public String upload(@RequestParam MultipartFile file, @RequestParam String desc) {
return String.format("File=%s, desc=%s", file.getOriginalFilename(), desc);
}
}
- 原生 Servlet:直接使用
request.getParameter()。 - Spring MVC:使用
@RequestParam、实体类对象、@RequestBody、@PathVariable、MultipartFile。 - 注意:
- 数据类型转换(如
int、long)需在框架中配置或手动处理。 - 使用
@RequestParam(required = false)或defaultValue避免参数缺失错误。 - 实体类必须有 getter/setter 方法。
- 数据类型转换(如
如果你有具体的使用场景(如接收数组、日期、嵌套对象等),请告诉我,我可以给出更针对性的示例。