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类,代码为:
/**
* SpringBoot整合thymeleaf
* @author JackLin
*
*/
@Controller
public class DemoController {
@RequestMapping("/show")
public String showInfo(Model model) {
model.addAttribute("msg", "Thymeleaf第一个案例!!");
model.addAttribute("key", new java.util.Date());
return "index";
}
@RequestMapping("/show2")
public String showInfo2(Model model) {
model.addAttribute("sex", "男");
model.addAttribute("id", "2");
return "index2";
}
@RequestMapping("/show3")
public String showInfo3(Model model) {
List<Users> list = new ArrayList<>();
list.add(new Users(1,"张山",20));
list.add(new Users(2,"李四",21));
list.add(new Users(3,"JackLin",22));
model.addAttribute("list", list);
return "index3";
}
@RequestMapping("/show4")
public String showInfo4(Model model) {
Map<String, Users> map = new HashMap<>();
map.put("i1", new Users(1,"张山",20));
map.put("i2", new Users(2,"李四",22));
map.put("i3", new Users(3,"龙武",23));
model.addAttribute("map", map);
return "index4";
}
@RequestMapping("/show5")
public String showInfo(HttpServletRequest request,Model model) {
request.setAttribute("req", "HttpServletRequest");
request.getSession().setAttribute("sess", "HttpSession");
request.getSession().getServletContext().setAttribute("app", "Application");
return "index5";
}
}
启动程序后在浏览器输入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页面失败】
@RestController
@RequestMapping(value = "/userInfo")
public class UserController {
@RequestMapping(value = "/getUserInfo",method = RequestMethod.GET)
public String getUserInfo(Map<String, Object> resultMap) {
User user = new User();
user.setName("天生");
user.setSex(0);
user.setAge(36);
resultMap.put("user",user);
return "userInfo";
}
上述代码实例,原本是想通过视图解析器返回到“userInfo.jsp”页面。但是在Controller层使用注解@RestController,那么配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容,即返回“userInfo”