restful风格接口

推荐在前后端分离项目中使用restful风格api

@RestController
@RequestMapping("employees")
public class EmployeeController {
    /**
     * 2个接口设计都是用相同资源(uri),相同请求方法,此时 SpringMVC 无法识别,
     * 认为是同一方法,报错:Ambiguous mapping. [模糊映射]
     *
     * RESTful 解决方案:使用 参数路径 方式
     *      具体实现:将参数作为请求映射路径一部分,[参与映射路径区分]
     *      比如:查询指定 id 的员工信息接口设计
     *      @RequestMapping(value = "/employees/{id}", method = RequestMethod.GET)
     *      其中 "/employees/{id}" 参数路径,{id} 就是路径参数
     *
     *      访问该接口时:http:localhost:8080/employees/1  其中 1 是 id 参数
     *      接口接收路径参数:使用 @PathVariable,表示将参数路径上的参数解析,并赋值给指定变量
     *      如果路径参数与变量名不一致,使用 @PathVariable("eid")明确指定
     *
     */
    // 查询所有
    @GetMapping
    public List<Employee> list() {
        return Arrays.asList(new Employee(1L,"森", 10), new Employee(2L, "小野", 11));
    }

    // 查询单个
    @GetMapping("/{eid}")
    public Employee queryById(@PathVariable("eid") Long id) {
        System.out.println("查询单个 = " + id);
        return new Employee(3L, "吉田", 8);
    }

    // 添加
    @PostMapping
    public Employee add(@ModelAttribute("employee") Employee employee) {
        System.out.println("添加 = " + employee.getId());
        return employee;
    }

    // 修改
    @PutMapping
    public Employee update(@ModelAttribute("employee") Employee employee) {
        System.out.println("修改 = " + employee.getId());
        employee.setId(employee.getId());
        employee.setName(employee.getName());
        employee.setAge(employee.getAge());
        return employee;
    }

    // 删除
    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        System.out.println("删除 = " + id);
        if (id != null && 1 == id) {
            return "删除成功";
        }
        return "删除失败";
    }
}

 

posted @ 2022-11-23 16:42  喵酱爱吃鱼  阅读(31)  评论(0编辑  收藏  举报