Java案例如何接收前端参数?

wen java案例 26

本文目录导读:

Java案例如何接收前端参数?

  1. 原生Servlet方式
  2. Spring MVC / Spring Boot方式
  3. 文件上传
  4. 接收请求头信息
  5. Cookie参数
  6. 实际项目完整示例
  7. 前端对应的请求示例

在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

选择哪种方式取决于你的业务需求和前端请求格式。

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