当前位置:   article > 正文

SpringBoot中@Controller和@RestController的作用和区别_@controller @rest

@controller @rest

SpringBoot中@Controller和@RestController的作用和区别

在springboot开发中控制层使用注解@Controller时,加有@GetMapping(@PostMapping或@RequestMapping)注解的方法返回值对应的是一个视图,而使用@RestController返回值对应的是json数据,而@Controller+@ResponseBody的作用相当于@RestController。

常用的Controller层作用和最终返回的结果

作用:控制器类,处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model返回给对应的View进行展示

返回结果:

1.返回json数据,可以跟@ResponseBody注解使用

2.返回字符串路径,作为视图跳转解析器

@Controller的实际应用

在src/main/resources/config/application.properties配置文件中配置

然后在src/mian/java/包名/controller控制层下创建DemoController类,代码为:

  1. /**
  2. * SpringBoot整合thymeleaf
  3. * @author JackLin
  4. *
  5. */
  6. @Controller
  7. public class DemoController {
  8. @RequestMapping("/show")
  9. public String showInfo(Model model) {
  10. model.addAttribute("msg", "Thymeleaf第一个案例!!");
  11. model.addAttribute("key", new java.util.Date());
  12. return "index";
  13. }
  14. @RequestMapping("/show2")
  15. public String showInfo2(Model model) {
  16. model.addAttribute("sex", "男");
  17. model.addAttribute("id", "2");
  18. return "index2";
  19. }
  20. @RequestMapping("/show3")
  21. public String showInfo3(Model model) {
  22. List<Users> list = new ArrayList<>();
  23. list.add(new Users(1,"张山",20));
  24. list.add(new Users(2,"李四",21));
  25. list.add(new Users(3,"JackLin",22));
  26. model.addAttribute("list", list);
  27. return "index3";
  28. }
  29. @RequestMapping("/show4")
  30. public String showInfo4(Model model) {
  31. Map<String, Users> map = new HashMap<>();
  32. map.put("i1", new Users(1,"张山",20));
  33. map.put("i2", new Users(2,"李四",22));
  34. map.put("i3", new Users(3,"龙武",23));
  35. model.addAttribute("map", map);
  36. return "index4";
  37. }
  38. @RequestMapping("/show5")
  39. public String showInfo(HttpServletRequest request,Model model) {
  40. request.setAttribute("req", "HttpServletRequest");
  41. request.getSession().setAttribute("sess", "HttpSession");
  42. request.getSession().getServletContext().setAttribute("app", "Application");
  43. return "index5";
  44. }
  45. }

启动程序后在浏览器输入localhost:8080/show访问页面即为templates文件夹下的各个html文件

这里的访问效果就不一一显示了,直接开浏览器输入localhost:8080/show可以返回你想要的页面(show可以是你自己设置的页面),返回哪个页面名字就需要在templates下创建相应的HTML文件。

@RestController在实际中的应用

@RestCobtroller=@Controller+@ResponseBody合在一起使用,.@RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面

实例代码:【使用@RestCobtroller导致返回jsp页面失败】

  1. @RestController
  2. @RequestMapping(value = "/userInfo")
  3. public class UserController {
  4. @RequestMapping(value = "/getUserInfo",method = RequestMethod.GET)
  5. public String getUserInfo(Map<String, Object> resultMap) {
  6. User user = new User();
  7. user.setName("天生");
  8. user.setSex(0);
  9. user.setAge(36);
  10. resultMap.put("user",user);
  11. return "userInfo";
  12. }

上述代码实例,原本是想通过视图解析器返回到userInfo.jsp页面。但是在Controller层使用注解@RestController,那么配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容,即返回“userInfo”

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/580075
推荐阅读
相关标签
  

闽ICP备14008679号