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了.

本人新手,肯定有理解错误的地方,还请大家不吝赐教,多多给予批评指正!
万般感谢!!!

posted @ 2022-03-17 15:55  怎言笑i  阅读(388)  评论(0编辑  收藏  举报