java中@Controller和@RestController的区别
通俗点理解: @RestController = @Controller + @ResponseBody
@RestController: 不能直接返回一个jsp或者html界面,如果想要返回jsp界面需要借助modeAndView
例如在该注解下面写如下语句(错误的):
@RequestMapping("main.do")
public String main() {
return "main.jsp";
}
//但是可以通过modelAndView来返回界面(正确的)(没验证到底对不对):
@RequestMapping("main.do")
public ModelAndView modelAndView(String name) {
//构建ModelAndView实例,并设置跳转地址(页面)为hello
ModelAndView view = new ModelAndView("main");
//将数据放置到ModelAndView对象view中,第二个参数可以是任何java类型
view.addObject("name",name);
//返回ModelAndView对象view
return view;
}
@Controller: 可以直接返回jsp界面
例如如下代码是正确的:
@RequestMapping("main.do")
public String main() {
return "main.jsp";
}
正常可以使用@controller,然后再需要返回json的时候在其方法上家@ResponseBody就可以,
这样在同一个类下,既可以有返回jsp或者html界面的方法,也可以有返回json的方法
但如果是菜单的controler(菜单一般是返回一个jsp或者html页面)和返回页面数据的controller是分开的,
那么关于菜单跳转的这个controller就可以设为@Controller,
关于返回页面数据的controller就可以设@RestController ,因为这样就不需要再每个方法
上面都加@ResponseBody了.
本人新手,肯定有理解错误的地方,还请大家不吝赐教,多多给予批评指正!
万般感谢!!!