SpringMVC中 @RestController 与@Controller 有什么不同
1,@Controller: 注解,
在Springmvc 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。为了先对Controller 有一个初步的印象,以下先定义一个简单的Controller :
下面是 @Controller 注解 源码
@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。
2,@RestController 注解
而 @RestController 也是注解在类上的,其实我们发现它的一部分作用发现它也是用于标记类。使其是一个Controller对象。
但是我们通过看源码发现 他跟 @ Controller 源码 多了一个 @ResponseBody
@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用,通常是在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
一般我们是前端尤其是处理AJAX请求必然要使用@ResponseBody注解。
3,总结
@RestController 是 @Controller+ @ResponseBody 的作用结合
如果@RestController 标记的类,当我们需要json 数据做异步的时候不需要在方法上面加@ResponseBody,
但是我们也要注意,方法返回的是不能返回jsp,html的。
如有哪里总结不对,欢迎多多指正。