Java请求参数案例如何接收

wen java案例 29

本文目录导读:

Java请求参数案例如何接收

  1. 原生 Servlet
  2. Spring MVC
  3. 文件上传(Spring MVC)
  4. 在 RESTful 风格中接收路径变量
  5. 常用技术与要点
  6. 完整案例:Spring Boot 统一接收各种参数

在 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@PathVariableMultipartFile
  • 注意
    • 数据类型转换(如 intlong)需在框架中配置或手动处理。
    • 使用 @RequestParam(required = false)defaultValue 避免参数缺失错误。
    • 实体类必须有 getter/setter 方法。

如果你有具体的使用场景(如接收数组、日期、嵌套对象等),请告诉我,我可以给出更针对性的示例。

抱歉,评论功能暂时关闭!