SpringBoot使用RestFul风格路径

青旅半醒 2024-03-25 23:58 155阅读 0赞

Java知识点总结:想看的可以从这里进入

目录

      • 2.16、RestFul风格

2.16、RestFul风格

SpringBoot因为本身就继承了SpringMVC,所以使用RestFul和SpringMVC一样。

RestFul风格是一种当前比较流行的互联网软件架构模式,它利用HTTP 协议的特性,规定了一套资源获取的方式,,它可以使软件更简洁,更有层次,易于实现缓存等机制。

在 web开发中,Rest使用HTTP协议连接器来标识对资源的操作,用 HTTP GET标识获取查询资源,HTTP POST标识创建资源,HTTP PUT标识修改资源,HTTP DELETE标识删除资源,这样就构成了 Rest风格数据处理的核心,它的增删改查在在Controller中通过四种注解来区分(也可以用@RequestMapping的属性method):































资源操作 对应注解 HTTP 请求方式
获取资源(SELECT) @GetMapping、
@RequestMapping(value = “”,method = RequestMethod.GET)
GET
新增资源(INSERT) @PostMapping
@RequestMapping(value = “”,method = RequestMethod.POST)
POST
修改资源(UPDATE) @PutMapping
@RequestMapping(value = “”,method = RequestMethod.PUT)
PUT
删除资源(DELETE) @DeleteMapping
@RequestMapping(value = “”,method = RequestMethod.DELETE)
DELETE
  • 传统的资源操作是通过不同的参数来实现的

    1. @Controller
    2. public class RestfulController {
    3. @RequestMapping("/summation")
    4. public String summation(int num1, int num2, Model model){
    5. int result = num1+num2;
    6. model.addAttribute("result","和为:"+result);
    7. return "";
    8. }
    9. }

    http://localhost:8080/summation?num1=15&num2=3

  • RestFul可以用相同的路径,通过修改提交方式达到不同请求的结果:

    访问路径都为http://localhost:8080/user,但根据不同的访问方式实现了增删改查四种操作

    1. @RestController
    2. public class RestFulController {
    3. @Autowired
    4. private UserService userService;
    5. //get对应查
    6. @GetMapping("/user")
    7. public String getUser(@PathVariable("id") int id){
    8. User user = userService.selectByPrimaryKey(id);
    9. return JSON.toJSONString(user);
    10. }
    11. //post对应新增
    12. @PostMapping("/user")
    13. public int postUser(@RequestBody User user){
    14. return userService.insert(user);
    15. }
    16. //put对应修改
    17. @PutMapping("/user")
    18. public int putUser(@RequestBody User user){
    19. return userService.updateByPrimaryKeySelective(user);
    20. }
    21. //delete对应删除
    22. @DeleteMapping("/user")
    23. public int deleteUser(int id){
    24. return userService.deleteByPrimaryKey(id);
    25. }
    26. }
  • 使用MockMvc对其进行测试

    1. @SpringBootTest
    2. @AutoConfigureMockMvc
    3. public class RestFulControllerTest {
  1. @Autowired
  2. private MockMvc mockMvc;
  3. //查
  4. @Test
  5. public void getTest() throws Exception {
  6. MockHttpServletRequestBuilder builder = get("/user")
  7. .accept(MediaType.APPLICATION_FORM_URLENCODED)
  8. .param("id","1");
  9. mockMvc.perform(builder)
  10. .andDo(print())
  11. .andReturn();
  12. }
  13. //增
  14. @Test
  15. public void postTest() throws Exception {
  16. User user = new User(null,"mockMvc","123456",true);
  17. String jsonString = JSON.toJSONString(user);
  18. MockHttpServletRequestBuilder builder = post("/user")
  19. .accept(MediaType.APPLICATION_JSON)
  20. .contentType(MediaType.APPLICATION_JSON)
  21. .content(jsonString);
  22. MvcResult mvcResult = mockMvc.perform(builder)
  23. .andDo(print())
  24. .andReturn();
  25. System.out.println("输出 " + mvcResult.getResponse().getContentAsString());
  26. }
  27. //改
  28. @Test
  29. public void putTest() throws Exception {
  30. User user = new User(3,"restful","123456",true);
  31. String jsonString = JSON.toJSONString(user);
  32. MockHttpServletRequestBuilder builder = put("/user")
  33. .accept(MediaType.APPLICATION_JSON)
  34. .contentType(MediaType.APPLICATION_JSON)
  35. .content(jsonString);
  36. MvcResult mvcResult = mockMvc.perform(builder)
  37. .andDo(print())
  38. .andReturn();
  39. System.out.println("输出 " + mvcResult.getResponse().getContentAsString());
  40. }
  41. //删除
  42. @Test
  43. public void deleteTest() throws Exception {
  44. MockHttpServletRequestBuilder builder = delete("/user")
  45. .accept(MediaType.APPLICATION_JSON)
  46. .param("id","9");
  47. MvcResult mvcResult = mockMvc.perform(builder)
  48. .andDo(print())
  49. .andReturn();
  50. System.out.println("输出 " + mvcResult.getResponse().getContentAsString());
  51. }
  52. }
  53. ![image-20220925183855756][]

需要注意几个注解:

  1. @RequestParam(value = “绑定值的名称”,required = 是否必须绑定):用在参数前,用来处理简单类型的绑定,原理是通过Request.getParameter() 获取参数值
  2. @RequestBody:用在参数前,主要用来处理JSON格式的数据映射
  3. @PathVariable:如果RestFul风格的路径中有 {id}这种的,可以用来与参数进行映射

发表评论

表情:
评论列表 (有 0 条评论,155人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RESTful风格

    写这篇,主要是之前呀,和团队一起接项目,我作为后台,既然把对数据的增删改查定义了4个不同uri接口。 所以我要用统一规范,对一个数据的增删改查只定义一个uri,不同的请求做相

    相关 restful风格

    概念          一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,

    相关 Restful风格

    什么是REST REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用