Spring框架:Controller和RestController区别
了解如何利用SpringMVC的注释创建RESTful Web服务。
Spring的基于注释的MVC框架简化了创建RESTful Web服务的过程。传统的Spring MVC控制器和RESTful Web服务控制器之间的关键区别在于: 创建HTTP响应主体的方式。
虽然传统的MVC控制器依赖于View技术,但RESTful Web服务控制器只返回对象,对象数据作为JSON / XML直接写入HTTP响应。
以下步骤描述了典型的Spring MVC REST工作流:
- 客户端以URI形式向Web服务发送请求。
- 该请求被DispatcherServlet拦截,该服务器查找Handler Mappings及其类型。
- 应用程序上下文文件中定义的Handler Mappings部分告诉DispatcherServlet使用哪种策略根据传入请求查找控制器。
- Spring MVC支持三种不同类型的映射请求URI到控制器:注释,名称约定和显式映射。
 
- 请求由Controller处理,响应返回到DispatcherServlet,然后DispatcherServlet将调度到视图。
使用@Controller时需要用@ResponseBody注释 Spring 3.x 或使用@Controller情况下,在方法上使用@ResponseBody注释时,Spring会转换返回值并自动将其写入HTTP响应。Controller类中的每个方法都必须使用@ResponseBody进行注释。 Spring有一个在后台注册的HttpMessageConverters列表。HTTPMessageConverter的职责是将请求主体转换为特定类并再次返回响应主体,具体取决于预定义的mime类型。每次发出请求命中@ResponseBody时,Spring都会遍历所有已注册的HTTPMessageConverters,寻找符合给定mime类型和类的第一个,然后将其用于实际转换。 @Controller 
 @RequestMapping("employees")
 public class EmployeeController {
 Employee employee = new Employee();
 @RequestMapping(value = "/{name}", method = RequestMethod.GET, produces = "application/json")
 public @ResponseBody Employee getEmployeeInJSON(@PathVariable String name) {
 employee.setName(name);
 employee.setEmail("employee1@genuitec.com");
 return employee;
 } @RequestMapping(value = "/{name}.xml", method = RequestMethod.GET, produces = "application/xml")
 public @ResponseBody Employee getEmployeeInXML(@PathVariable String name) {
 employee.setName(name);
 employee.setEmail("employee1@genuitec.com");
 return employee;
 }
 }注意@ResponseBody添加到返回值中的每个@RequestMapping方法,Spring将做两件事: - 将<context:component-scan> 和  <mvc:annotation-driven /> 标记添加  到Spring配置文件中。
- <context:component-scan> 激活注释并扫描包以在应用程序上下文中查找和注册bean。
- <mvc:annotation-driven/> 如果Jackson / JAXB库在类路径上,则添加对读写JSON / XML的支持。
- 对于JSON格式,包括jackson-databind jar,对于XML,包括项目类路径的jaxb-api-osgi jar。
 
 
- 将<context:component-scan> 和  <mvc:annotation-driven /> 标记添加  到Spring配置文件中。
- 可在任何服务器(例如,Tomcat)上部署并运行应用程序。
http://localhost:8080/SpringRestControllerExample/rest/employees/Bob 并显示输出JSON. http://localhost:8080/SpringRestControllerExample/rest/employees/Bob.xml 输出XML 使用@RestController Spring 4.0引入了@RestController,这是一个控制器的专用版本,它是一个方便的注释,除了自动添加@Controller和@ResponseBody注释之外没有其他新魔法。 通过使用@RestController批注对控制器类进行注释,您不再需要将@ResponseBody添加到所有请求映射方法中。@ResponseBody注释默认处于活动状态。 要在我们的示例中使用@RestController,我们需要做的就是将@Controller修改为@RestController并从每个方法中删除@ResponseBody。结果类应如下所示: @RestController 
 public class EmployeeController { Employee employee = new Employee(); @GetMapping("/employees/{name}")
 public Employee getEmployeeInJSON(@PathVariable("name") String name) {
 employee.setName(name);
 employee.setEmail("employee1@genuitec.com");
 return employee;
 }
 
 }我们不再需要将@ResponseBody添加到请求映射方法中。进行更改后,再次在服务器上运行应用程序会产生与以前相同的输出。 使用@RestController非常简单,这是从Spring v4.0开始创建MVC RESTful Web服务或基于SpringBoot 2的首选方法。 
本文转载自:https://www.jdon.com/50892
Spring框架:Controller和RestController区别的更多相关文章
- Spring中@Controller和@RestController之间的区别
		1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ... 
- 【spring  Boot】Spring中@Controller和@RestController之间的区别
		spring Boot入手的第一天,看到例子中的@RestController ............. 相同点:都是用来表示Spring某个类的是否可以接收HTTP请求 不同点:@Controll ... 
- Spring框架Controller层(表现层)针对方法参数是Bean时HttpServletRequest绑定参数值问题解释
		在做项目的时候,有一个需求是将数据库中的信息封装到实体类返回到jsp界面 传过来的参数只是实体类的id属性,然后根据id属性去查数据库,事情就是这样,然后 结果遇到很奇怪的事情,在jsp页面中使用EL ... 
- @Controller 和 @RestController 区别
		@Controller 用于标识为spring MVC的controller @RestController 是一个便利的注解,加了这个注解就相当于加了@Controller 和 @ResponseB ... 
- Spring 的@Controller 和@RestController的区别
		@RestController Spring 4.0中新增的特性 @RestController 继承自 @Controller,相当于@ResponseBody + @Controller 1. ... 
- @Controller和@RestController的区别
		1. Controller, RestController的共同点 都是用来表示spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ... 
- @Controller和@RestController之间的区别
		1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @Co ... 
- Controller和RestController的区别
		1. Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2. Controller, RestController的不同点 @C ... 
- Controller与RestController的区别
		在使用Spring系列的框架的时候,相信几乎所有人都会遇见@Controller与@RestController两个注解,那么这两个注解到底有什么区别? 1. 标记有@RestController的类 ... 
随机推荐
- Mysql的BigInt(20),Int(20)以及Bigint(32)有区别吗?
			原文: http://stackoverflow.com/questions/3135804/types-in-mysql-bigint20-vs-int20-etcc http://dev.mysq ... 
- [转帖]Java升级那么快,多个版本如何灵活切换和管理?
			Java升级那么快,多个版本如何灵活切换和管理? https://segmentfault.com/a/1190000021037771 前言 近两年,Java 版本升级频繁,感觉刚刚掌握 Java8 ... 
- 重置 Bootstrap modal 模态框数据
			利用 Bootstrap modal 模态框弹层添加或编辑数据,第二次弹出模态框时总是记住上一次的数据值,stackoverflow 上找到个比较好的方法,就是利用 jQuery 的 clone 方法 ... 
- 「UER#2」谣言的传播
			「UER#2」谣言的传播 写了个乱搞,怎么莫名其妙就AC了,这...,之后又想了30min结合题解终于会证了. 首先最大值比较简单,记 \(f_i\) 为第 \(i\) 个点能到达的点数,上界 \(\ ... 
- Spring @Autowired 注入为 null
			原因 配置缺失,比如为开启注解扫描驱动.注入组件为注册: 使用 new 关键字创建的对象不受spring容器管理,无法注入: 注入静态变量, 静态变量/类变量不是对象的属性,而是一个类的属性,spri ... 
- 介绍ArcGIS中各种数据的打开方法——mdb(个人数据库)
			3.打开存储在Access GeoDatabase的要素类 使用工作空间打开一个Access库中的一个要素类. private void OpenWorkspaceFromFileAccess(str ... 
- C# vb .net实现翻转特效滤镜
			在.net中,如何简单快捷地实现Photoshop滤镜组中的翻转特效效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ... 
- IntelliJ idea鼠标移动到类上显示文档document(javadoc)内容
			IntelliJ idea鼠标移动到类上显示文档document(javadoc)内容 Step 1:设置鼠标移动到类上自动显示Javadoc文档 step2:为jdk下载javadoc Step3: ... 
- LocalStorageUtils
			对localStorage进行封装: var LocalStorageUtils = new function (){ if(window.localStorage==null){ throw new ... 
- GO执行shell命令
			Golang执行shell命令主要依靠exec模块 代码为核心逻辑,并非全部 运行命令 cmd1 = exec.Command("ls") if err = cmd1.Run(); ... 
