REST风格,@PathVariable注解

举报
tea_year 发表于 2021/12/22 22:49:40 2021/12/22
【摘要】 REST(Representational State Transfer,表述性状态转移)是一种软件风格。所谓的REST风格可以简单理解为:使用url表示资源时,每个资源都用一个独一无二的url来表示,并使用http方法表示操作,即准确描述服务器对资源的处理动作(get、post、put、delete),实现资源的增删改差。举例如下 ...

REST(Representational State Transfer,表述性状态转移)是一种软件风格。所谓的REST风格可以简单理解为:使用url表示资源时,每个资源都用一个独一无二的url来表示,并使用http方法表示操作,即准确描述服务器对资源的处理动作(get、post、put、delete),实现资源的增删改差。举例如下

/user/view/12  /userview.html?id=12

/user/delete/12  /userdelete.html?id=12

/user/modify/12   /usermodify.html?id=12

我们可以发现REST风格的url中最明显的就是参数不再使用“ ?”传递。这种风格可读性好,项目结构清晰,springmvc也提供对这种风格的支持。

由于url参数有时会传递中文,那么就会出现中文乱码问题,所以要根据实际情况灵活处理,混搭使用。

@RequestMapping(value = "/view/{id}", method = RequestMethod.GET)
public String view(@PathVariable String id, Model model){
    User user = userService.getUserById(id);
    model.addAttribute(user);
    return "userview";
}

@PathVariable在spring-web依赖下,所在包如下

对于REST风格url中的参数接受,springmvc提供了@PathVariable注解,可以将url中的{xxx}占位符参数绑定到控制器处理方法的入参中。

 

和?的使用相比较:

spingMvc REST的风格:

/user_show?id=120
/user/120


/user_delete?id=123
/user/123/delete


/user_updateInput?id=123
/user/123/update


/user_list
/users
/user/users
REST的风格不等于使用了REST技术


@PathVariable路径变量参数的使用 :value="/{username}" 路径参数一定要使用{}包裹起来;
 


  
  1. @RequestMapping(value="/{username}",method=RequestMethod.GET)
  2. public String show(@PathVariable String username,Model model) {
  3. model.addAttribute(users.get(username));
  4. return "user/show";
  5. }
  6. @RequestMapping(value="/{username}",method=RequestMethod.GET,params="json")
  7. @ResponseBody
  8. public User show(@PathVariable String username) {
  9. return users.get(username);
  10. }
  11. @RequestMapping(value="/{username}/update",method=RequestMethod.GET)
  12. public String update(@PathVariable String username,Model model) {
  13. model.addAttribute(users.get(username));
  14. return "user/update";
  15. }
  16. @RequestMapping(value="/{username}/update",method=RequestMethod.POST)
  17. public String update(@PathVariable String username,@Validated User user,BindingResult br) {
  18. if(br.hasErrors()) {
  19. //如果有错误直接跳转到add视图
  20. return "user/update";
  21. }
  22. users.put(username, user);
  23. return "redirect:/user/users";
  24. }
  25. @RequestMapping(value="/{username}/delete",method=RequestMethod.GET)
  26. public String delete(@PathVariable String username) {
  27. users.remove(username);
  28. return "redirect:/user/users";
  29. }

 

文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/104179049

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。