@RestControlle=@ResponseBody+@Controller
@ResponseBody
表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据或接口交互时使用,用于构建RESTful的api。一般情况下会将返回的类转为Json字符串的形式返回给客户端。如果返回的类型的String类型,那么返回的还是String型
@Controller
将被修饰的类被实例化并注入Spring IOC容器中。语义化的作用,即代表该类是充当Controller的作用。一般由该类(控制器)负责将用户发来的URL请求转发到对应的服务接口(service层)。
@RestController和@Controller区别
(1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
(2) 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
例子:
(1)使用@RestController注解
@RestController
public class HelloController {
@RequestMapping(value="/hello")
public String Hello(){
return "hello world";
}
}
(2)使用@Controller和@ResponseBody注解
@Controller
@ResponseBody
public class HelloController {
@RequestMapping(value="/hello")
public String Hello(){
return "hello world!!!";
}
}
在例子(1)中,如果把@RestController改成@Controller,当在浏览器输入/hello的时候,会报错,因为当只用@Controller修饰的时候,Spring以为会返回一个View(Spring MVC中的V),但是返回的是一个Map。