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的类 ...
随机推荐
- Beautiful Soup库入门
1.安装:pip install beautifulsoup4 Beautiful Soup库是解析.遍历.维护“标签树”的功能库 2.引用:(1)from bs4 import BeautifulS ...
- 基于layUI调用后台数据实现区域信息级联查询
基于layUI调用后台数据实现区域信息级联查询 1.基本思路 后台提供根据区域编码查询区域列表公共接口 页面初始化调用后台接口加载所有省份 点击省份将省份区域编码传入后台查询该省份下所有地市信息,以此 ...
- Word 插入目录详细教程 -- 视频教程(6)
>> 视频教程链接:B站,速度快,清晰 更多关于插入目录的方法,参看:Word插入目录系列 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- gtest入门
介绍 gtest是谷歌开发的用来做C++单元测试的测试框架 基本概念 使用gtest,你就需要写断言(assertions),用来检查一个表达式是否为true.断言的结果有三个:正确.非致命错误.致命 ...
- Oracle将小于1的数字to_char后,丢掉小数点前0的解决办法
使用to_char方法将小于0的数字转化为字符串时会出现小数点前0丢失的问题: 解决方案: 使用 oracle的tochar() 函数,并指定位数. --解决方案: 使用 oracle的tochar( ...
- ArcGIS Engine开发鹰眼图的功能(代码优化篇)
在上一篇,ArcGIS Engine开发鹰眼图的功能(基础篇) 上一篇的实现效果图如下, 如果仔细观察,会发现一个问题,即在“鹰眼”的区域,只要在红色线框内的注记会被覆盖. 如果红色框包括整张图的话, ...
- C# 练习题 将一个正整数分解质因数
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程 ...
- 2019 苏宁控股java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.苏宁等公司offer,岗位是Java后端开发,因为发展原因最终选择去了苏宁,入职一年时间了,也成为了面试官,之 ...
- aria2 资料
https://www.jianshu.com/p/8124b5b6ef95https://quan.ithome.com/0/331/853.htmhttp://www.360doc.com/con ...
- 2019-07-25 PDO
PDO是什么? pdo是php数据对象,即php data object .使用pdo是为了让我们能够使用相同的代码连接不同的数据库.PDO扩展是以面向对象的方式来进行封装,也就是说,我们的PDO扩展 ...