我这里有个一springboot项目
我在启动类同目录下创建了一个目录 目录名叫 controller
里面有一个UserController
diam结构是这样的
package com.example.threshold.controller;
import com.example.threshold.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
//声明Controller控制器
@Controller
public class UserController {
// 设置一个 GET接口 子路径get 接受一个id参数 id要跟在路径后面
@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
@ResponseBody
public String getId(@PathVariable Integer id) {
return "您要获取的用户id为"+id;
}
//设置一个 POST请求 子路径叫 add 接受一个name参数 需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数
@RequestMapping(value = "/user", method = RequestMethod.POST)
@ResponseBody
public String addUser(@RequestParam String name) {
return "你要添加的用户名称为"+name;
}
//设置一个 PUT请求 子路径叫 edit 接受一个user类对象参数 要求json传参
@RequestMapping(value = "/user", method = RequestMethod.PUT)
@ResponseBody
public user editUser(@RequestBody user user) {
//把接到的json传回去
return user;
}
// 设置一个DELETE请求 子路径为delete 接受一个参数id 和 一个type参数 接受方式为 表单或者 路径问号后携带参数
@RequestMapping(value = "/user", method = RequestMethod.DELETE)
@ResponseBody
public String deleteUser(@RequestParam Integer id,Integer type) {
return "你要删除的用户id为"+id+"操作类型为"+type;
}
}
这是一个基础的REST风格风格开发 但其实 我们可以很大程度的简化
这里 我先启动项目
然后用Postman测试 这些都是可以正常访问 和 调用返回的
确认无误之后 我们开一个一个解决一下他们的简化快捷开发
首先 来做第一个简化 大家会发现 他们路径都是user 那么 简化最需要简的就是 重复部分 我们先改成这样
package com.example.threshold.controller;
import com.example.threshold.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
//声明Controller控制器
@Controller
@RequestMapping("/user")
public class UserController {
// 设置一个 GET接口 子路径get 接受一个id参数 id要跟在路径后面
@RequestMapping(value = "/{id}",method = RequestMethod.GET)
@ResponseBody
public String getId(@PathVariable Integer id) {
return "您要获取的用户id为"+id;
}
//设置一个 POST请求 子路径叫 add 接受一个name参数 需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数
@RequestMapping( method = RequestMethod.POST)
@ResponseBody
public String addUser(@RequestParam String name) {
return "你要添加的用户名称为"+name;
}
//设置一个 PUT请求 子路径叫 edit 接受一个user类对象参数 要求json传参
@RequestMapping(method = RequestMethod.PUT)
@ResponseBody
public user editUser(@RequestBody user user) {
//把接到的json传回去
return user;
}
// 设置一个DELETE请求 子路径为delete 接受一个参数id 和 一个type参数 接受方式为 表单或者 路径问号后携带参数
@RequestMapping(method = RequestMethod.DELETE)
@ResponseBody
public String deleteUser(@RequestParam Integer id,Integer type) {
return "你要删除的用户id为"+id+"操作类型为"+type;
}
}
我们再次尝试访问 会确认一切正常
这里 触发 get 因为后面的id是路径参数 需要保留 其他 如果你想直接用user这个名字 就不需要加这个RequestMapping的value来声明路径了
如果你想叫 user/add 就可以 直接放
@RequestMapping(value = "/add",method = RequestMethod.POST)
然后 你会发现 全部都用了 ResponseBody
那么是不是重复 那我们干掉
写在类上面 每个方法就不需要单独加了 这个就表示 这个类下所有的方法都使用ResponseBody
然后是头上的
@Controller
@ResponseBody
其实很多类都会用 那么 我们就可以这样
将这两个注解干掉直接换成
@RestController
我们点进去看一下
都在这里面了
然后 我们发现 每一个方法都有一个 RequestMethod.请求方式 这个也可以写简单一点
我们直接改成这样
package com.example.threshold.controller;
import com.example.threshold.user;
import org.springframework.web.bind.annotation.*;
//声明Controller控制器
@RestController
@RequestMapping("/user")
public class UserController {
// 设置一个 GET接口 子路径get 接受一个id参数 id要跟在路径后面
@GetMapping("/{id}")
public String getId(@PathVariable Integer id) {
return "您要获取的用户id为"+id;
}
//设置一个 POST请求 子路径叫 add 接受一个name参数 需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数
@PostMapping
public String addUser(@RequestParam String name) {
return "你要添加的用户名称为"+name;
}
//设置一个 PUT请求 子路径叫 edit 接受一个user类对象参数 要求json传参
@PutMapping
public user editUser(@RequestBody user user) {
//把接到的json传回去
return user;
}
// 设置一个DELETE请求 子路径为delete 接受一个参数id 和 一个type参数 接受方式为 表单或者 路径问号后携带参数
@DeleteMapping
public String deleteUser(@RequestParam Integer id,Integer type) {
return "你要删除的用户id为"+id+"操作类型为"+type;
}
}
DeleteMapping声明delete 请求
PutMapping声明put 请求
PostMapping声明post 请求
GetMapping声明get 请求
如果 有路径 或者路径参数这几 在后面接 (“/后面的内容”)
就好了