@controller和@RestController的用法小结

今天开始用的是@RestController,跳转不到html页面,后来改成@controller就可以跳转了,总结了一下两者的用法和区别。

首先两者都是用来表示spring某个类的是否可以接收HTTP请求

@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

例如:本来应该到index.jsp页面的,则其显示index.

2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。


在@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”},前端页面只需要处理这个字符串即可。

你可能感兴趣的:(@controller和@RestController的用法小结)