今天开始用的是@RestController,跳转不到html页面,后来改成@controller就可以跳转了,总结了一下两者的用法和区别。
首先两者都是用来表示spring某个类的是否可以接收HTTP请求
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
例如:本来应该到index.jsp页面的,则其显示index.
2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。在@controller注解中,返回的是字符串,(如果想返回string或者json,在方法名前加上ResponseBody)或者是字符串匹配的模板名称,与html页面配合使用的,
在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)的数据将填充user视图中的相关属性,然后展示到浏览器。
java示例代码如下:
@Controller@RequestMapping(method = RequestMethod.GET, value = "/")
public String getuser(Model model) throws IOException {
model.addAttribute("name",bob);
model.addAttribute("sex",boy);
return "user";//user是模板名
}
而在@restcontroller中,返回的应该是一个对象,即return一个user对象,这时,在没有页面的情况下,也能
看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。相应的java代码:
@RestController@RequestMapping(method = RequestMethod.GET, value = "/")
public User getuser( ) throws IOException {
User bob=new User();
bob.setName("bob");
bob.setSex("boy");
return bob;
}
访问网址得到的是json字符串{“name”:”bob”,”sex”:”boy”},前端页面只需要处理这个字符串即可。