如何在 Spring MVC 中使用 `@PostMapping`? 如何在 Spring MVC 中使用 `@PutMapping`?
@PostMapping
和 @PutMapping
是 Spring MVC 中用于处理 HTTP POST 和 PUT 请求的注解。它们分别对应 HTTP 协议中的 POST 和 PUT 方法,通常用于创建和更新资源。下面详细解释如何在 Spring MVC 中使用这两个注解。
1. 使用 @PostMapping
@PostMapping
注解用于处理 HTTP POST 请求。POST 请求通常用于创建新的资源。
示例代码
假设我们有一个 Employee
实体类和对应的 EmployeeService
接口:
package com.itheima.reggie.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class Employee {
private Long id;
private String name;
private String username;
private String password;
private String phone;
private String email;
private Integer status;
private LocalDateTime createTime;
private LocalDateTime updateTime;
private Long createUser;
private Long updateUser;
}
package com.itheima.reggie.service;
import com.itheima.reggie.entity.Employee;
public interface EmployeeService {
Employee save(Employee employee);
}
控制器方法
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PostMapping("/employees")
public R<String> createEmployee(@RequestBody Employee employee) {
// 设置创建时间和创建人
employee.setCreateTime(LocalDateTime.now());
employee.setCreateUser(1L); // 假设当前登录用户的ID为1
// 保存员工信息
Employee savedEmployee = employeeService.save(employee);
return R.success("员工信息创建成功");
}
}
2. 使用 @PutMapping
@PutMapping
注解用于处理 HTTP PUT 请求。PUT 请求通常用于更新现有资源。
示例代码
假设我们有一个 Employee
实体类和对应的 EmployeeService
接口(与上面相同):
控制器方法
import com.itheima.reggie.entity.Employee;
import com.itheima.reggie.service.EmployeeService;
import com.itheima.reggie.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
@RestController
public class EmployeeController {
@Autowired
private EmployeeService employeeService;
@PutMapping("/employees")
public R<String> updateEmployee(HttpServletRequest request, @RequestBody Employee employee) {
// 记录日志
log.info(employee.toString());
// 获取当前线程ID
long id = Thread.currentThread().getId();
log.info("线程id为:{}", id);
// 获取当前登录用户的ID
Long empId = (Long) request.getSession().getAttribute("employee");
if (empId == null) {
return R.error("用户未登录");
}
// 设置更新时间和更新人
employee.setUpdateTime(LocalDateTime.now());
employee.setUpdateUser(empId);
// 更新员工信息
employeeService.updateById(employee);
return R.success("员工信息修改成功");
}
}
详细解释
@PostMapping
示例
-
注解:
@PostMapping("/employees")
:表示该方法处理发送到/employees
路径的 POST 请求。
-
方法签名:
public R<String> createEmployee(@RequestBody Employee employee)
:- 返回类型:
R<String>
,表示返回一个封装了字符串类型数据的响应结果。 - 参数:
@RequestBody Employee employee
:用于接收请求体中的 JSON 数据,并将其自动转换为Employee
对象。
- 返回类型:
-
设置创建时间和创建人:
employee.setCreateTime(LocalDateTime.now());
:设置创建时间为当前时间。employee.setCreateUser(1L);
:设置创建人为当前登录用户的 ID(假设为 1)。
-
保存员工信息:
Employee savedEmployee = employeeService.save(employee);
:调用employeeService
的save
方法保存员工信息。
-
返回响应结果:
return R.success("员工信息创建成功");
:返回一个成功的响应结果,包含成功消息 “员工信息创建成功”。
@PutMapping
示例
-
注解:
@PutMapping("/employees")
:表示该方法处理发送到/employees
路径的 PUT 请求。
-
方法签名:
public R<String> updateEmployee(HttpServletRequest request, @RequestBody Employee employee)
:- 返回类型:
R<String>
,表示返回一个封装了字符串类型数据的响应结果。 - 参数:
HttpServletRequest request
:用于获取 HTTP 请求的相关信息。@RequestBody Employee employee
:用于接收请求体中的 JSON 数据,并将其自动转换为Employee
对象。
- 返回类型:
-
记录日志:
log.info(employee.toString());
:记录传入的Employee
对象的信息,便于调试和跟踪。
-
获取当前线程 ID:
long id = Thread.currentThread().getId();
:获取当前执行线程的 ID。log.info("线程id为:{}", id);
:记录当前线程的 ID,便于调试和跟踪。
-
获取当前登录用户的 ID:
Long empId = (Long) request.getSession().getAttribute("employee");
:从当前会话中获取登录用户的 ID。if (empId == null) { return R.error("用户未登录"); }
:如果会话中没有 “employee” 属性,返回一个错误响应。
-
设置更新时间和更新人:
employee.setUpdateTime(LocalDateTime.now());
:设置更新时间为当前时间。employee.setUpdateUser(empId);
:设置更新人为当前登录用户的 ID。
-
更新员工信息:
employeeService.updateById(employee);
:调用employeeService
的updateById
方法更新员工信息。
-
返回响应结果:
return R.success("员工信息修改成功");
:返回一个成功的响应结果,包含成功消息 “员工信息修改成功”。
总结
@PostMapping
:用于处理 HTTP POST 请求,通常用于创建新的资源。@PutMapping
:用于处理 HTTP PUT 请求,通常用于更新现有资源。
通过使用这两个注解,你可以方便地在 Spring MVC 中处理不同的 HTTP 请求,并实现相应的业务逻辑。希望这能帮助你更好地理解和使用 @PostMapping
和 @PutMapping
。如果你有其他问题,欢迎继续提问。