@GetMapping,@PostMapping,@PutMapping,@DeleteMapping的区别,及@PathVariable,@Valid @RequestBody的使用

本文深入解析了RESTful API中四种核心HTTP方法:GET、POST、PUT和DELETE的使用场景及实现方式,通过一个完整的员工信息管理系统示例,展示了如何利用这些方法进行数据的检索、创建、更新和删除。

@GetMapping,@PostMapping,@PutMapping,@DeleteMapping的区别

Complete Example - EmployeeController.java
@RestController
@RequestMapping("/api/v1")
public class EmployeeController {
    @Autowired
    private EmployeeRepository employeeRepository;

    @GetMapping("/employees")
    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    @GetMapping("/employees/{id}")
    public ResponseEntity<Employee> getEmployeeById(@PathVariable(value = "id") Long employeeId)
        throws ResourceNotFoundException {
        Employee employee = employeeRepository.findById(employeeId)
          .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId));
        return ResponseEntity.ok().body(employee);
    }
    
    @PostMapping("/employees")
    public Employee createEmployee(@Valid @RequestBody Employee employee) {
        return employeeRepository.save(employee);
    }

    @PutMapping("/employees/{id}")
    public ResponseEntity<Employee> updateEmployee(@PathVariable(value = "id") Long employeeId,
         @Valid @RequestBody Employee employeeDetails) throws ResourceNotFoundException {
        Employee employee = employeeRepository.findById(employeeId)
        .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId));

        employee.setEmailId(employeeDetails.getEmailId());
        employee.setLastName(employeeDetails.getLastName());
        employee.setFirstName(employeeDetails.getFirstName());
        final Employee updatedEmployee = employeeRepository.save(employee);
        return ResponseEntity.ok(updatedEmployee);
    }

    @DeleteMapping("/employees/{id}")
    public Map<String, Boolean> deleteEmployee(@PathVariable(value = "id") Long employeeId)
         throws ResourceNotFoundException {
        Employee employee = employeeRepository.findById(employeeId)
       .orElseThrow(() -> new ResourceNotFoundException("Employee not found for this id :: " + employeeId));

        employeeRepository.delete(employee);
        Map<String, Boolean> response = new HashMap<>();
        response.put("deleted", Boolean.TRUE);
        return response;
    }
}
package com.example.todo.controller; import com.example.todo.dto.ToDoCriteria; import com.example.todo.entity.ToDo; import com.example.todo.service.ToDoService; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.security.access.annotation.Secured; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/todo") public class ToDoController { @Autowired private ToDoService toDoService; @PostMapping() public ToDo createToDo(@Validated @RequestBody ToDo toDo) { return toDoService.createToDo(toDo); } @PutMapping("/{id}") public ToDo updateToDo(@PathVariable Long id, @RequestBody ToDo toDo) { toDo.setId(id); return toDoService.updateToDo(toDo); } @GetMapping("/{id}") public ToDo getToDoById(@PathVariable Long id) { return toDoService.getToDoById(id); } @GetMapping public Page<ToDo> getToDos(ToDoCriteria criteria) { return toDoService.getToDos(criteria); } @Secured("ROLE_ADMIN") @DeleteMapping("/{id}") public void deleteToDoById(@PathVariable Long id) { toDoService.deleteToDoById(id); } } 完成下面的功能: 1. 对创建ToDo的api,只有ADMIN才能访问; 2. 对获取指定id的ToDo,必须登录才能访问;
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值