本文目录导读:

在Java Web开发中,接收前端参数有多种方式,具体取决于你使用的框架(如Servlet、Spring MVC、Spring Boot等),以下是几种常见场景的详细说明:
原生Servlet方式
获取普通参数
@WebServlet("/api/user")
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
// 获取单个参数
String name = req.getParameter("name");
String age = req.getParameter("age");
// 获取多个同名参数(如checkbox)
String[] hobbies = req.getParameterValues("hobby");
// 获取所有参数名
Enumeration<String> paramNames = req.getParameterNames();
// 获取所有参数Map
Map<String, String[]> paramMap = req.getParameterMap();
}
}
获取JSON格式参数
// 需要读取请求体
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 方式1:读取流
StringBuilder sb = new StringBuilder();
String line;
BufferedReader reader = req.getReader();
while ((line = reader.readLine()) != null) {
sb.append(line);
}
String jsonStr = sb.toString();
// 方式2:使用工具类
String jsonBody = IOUtils.toString(req.getInputStream(), "UTF-8");
// 解析JSON(需要Jackson等库)
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonBody, User.class);
}
Spring MVC / Spring Boot方式
1 @RequestParam - 获取单个参数
@RestController
@RequestMapping("/api")
public class UserController {
// GET请求: /api/user?name=John&age=25
@GetMapping("/user")
public String getUser(@RequestParam("name") String name,
@RequestParam(value = "age", required = false) Integer age) {
return "Name: " + name + ", Age: " + age;
}
// 带默认值
@GetMapping("/search")
public String search(@RequestParam(defaultValue = "10") int page,
@RequestParam(defaultValue = "20") int size) {
return "Page: " + page + ", Size: " + size;
}
}
2 @PathVariable - 路径参数
// 请求: /api/users/123
@GetMapping("/users/{id}")
public User getUserById(@PathVariable("id") Long id) {
return userService.findById(id);
}
// 多个路径参数
@GetMapping("/users/{userId}/orders/{orderId}")
public String getOrder(@PathVariable Long userId, @PathVariable Long orderId) {
return "User: " + userId + ", Order: " + orderId;
}
3 @RequestBody - JSON参数
// 前端发JSON: {"name":"John","age":25,"email":"john@example.com"}
@PostMapping("/user")
public User createUser(@RequestBody User user) {
return userService.save(user);
}
// 复杂JSON嵌套
@PostMapping("/order")
public Order createOrder(@RequestBody OrderRequest request) {
// request包含:userId, items[], address等
}
4 @ModelAttribute - 对象绑定
// 表单提交或查询参数自动绑定到对象
@PostMapping("/register")
public String register(@ModelAttribute User user) {
// 自动将表单字段映射到User对象
return "注册成功";
}
// 也可以省略@ModelAttribute
@PostMapping("/save")
public String saveUser(User user) {
// 参数名自动匹配
}
5 直接接收Map
@PostMapping("/save")
public String saveUser(@RequestParam Map<String, String> params) {
String name = params.get("name");
String age = params.get("age");
return "Received: " + params;
}
// 接收整个请求体map
@PostMapping("/json-map")
public String saveJson(@RequestBody Map<String, Object> jsonMap) {
// 处理JSON map
}
文件上传
Spring Boot方式
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
String fileName = file.getOriginalFilename();
// 保存文件
file.transferTo(new File("/uploads/" + fileName));
return "上传成功";
}
// 多文件上传
@PostMapping("/uploads")
public String uploadFiles(@RequestParam("files") MultipartFile[] files) {
for (MultipartFile file : files) {
// 处理每个文件
}
return "上传成功";
}
接收请求头信息
@GetMapping("/header")
public String getHeaders(@RequestHeader("User-Agent") String userAgent,
@RequestHeader(value = "Authorization", required = false) String token) {
return "User-Agent: " + userAgent + ", Token: " + token;
}
// 获取所有请求头
@GetMapping("/all-headers")
public String getAllHeaders(@RequestHeader Map<String, String> headers) {
return headers.toString();
}
Cookie参数
@GetMapping("/cookie")
public String getCookie(@CookieValue(value = "sessionId", defaultValue = "") String sessionId) {
return "Session ID: " + sessionId;
}
实际项目完整示例
@RestController
@RequestMapping("/api/users")
public class UserController {
// 1. 查询参数
@GetMapping
public PageResult<User> listUsers(@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size,
@RequestParam(required = false) String keyword) {
return userService.list(page, size, keyword);
}
// 2. 路径参数
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
// 3. 创建用户 - JSON
@PostMapping
public User createUser(@RequestBody @Valid UserCreateRequest request) {
return userService.create(request);
}
// 4. 更新用户 - 混合参数
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id,
@RequestBody @Valid UserUpdateRequest request) {
return userService.update(id, request);
}
// 5. 部分更新
@PatchMapping("/{id}")
public User partialUpdate(@PathVariable Long id,
@RequestBody Map<String, Object> updates) {
return userService.partialUpdate(id, updates);
}
// 6. 带参数查询
@GetMapping("/search")
public List<User> searchUsers(@ModelAttribute UserSearchCriteria criteria) {
return userService.search(criteria);
}
// 7. 上传头像
@PostMapping("/{id}/avatar")
public String uploadAvatar(@PathVariable Long id,
@RequestParam("avatar") MultipartFile file) {
return userService.saveAvatar(id, file);
}
}
前端对应的请求示例
// 1. GET请求带参数
axios.get('/api/users', {
params: { page: 1, size: 10, keyword: '张三' }
});
// 2. 路径参数
axios.get('/api/users/123');
// 3. POST JSON
axios.post('/api/users', {
name: '张三',
age: 25,
email: 'zhangsan@example.com'
});
// 4. 文件上传
const formData = new FormData();
formData.append('file', fileInput.files[0]);
axios.post('/api/users/1/avatar', formData, {
headers: { 'Content-Type': 'multipart/form-data' }
});
// 5. 表单提交
const formData = new URLSearchParams();
formData.append('name', '张三');
formData.append('age', '25');
axios.post('/api/users/save', formData);
| 注解/方式 | 适用场景 | 前端传参方式 |
|---|---|---|
@RequestParam |
单个参数 | URL参数/表单参数 |
@PathVariable |
RESTful路径 | URL路径 |
@RequestBody |
复杂数据结构 | JSON/XML |
@ModelAttribute |
对象绑定 | 表单/查询参数 |
@RequestHeader |
HTTP头信息 | 请求头 |
@CookieValue |
Cookie值 | Cookie |
MultipartFile |
文件上传 | FormData |
选择哪种方式取决于你的业务需求和前端请求格式。