Spring框架:@RestController与@Controller

栏目: Java · 发布时间: 6年前

内容简介:了解如何利用SpringMVC的注释创建RESTful Web服务。Spring的基于注释的MVC框架简化了创建RESTful Web服务的过程。传统的Spring MVC控制器和RESTful Web服务控制器之间的关键区别在于: 创建HTTP响应主体的方式。虽然传统的MVC控制器依赖于View技术,但RESTful Web服务控制器只返回对象,对象数据作为JSON / XML直接写入HTTP响应。

了解如何利用SpringMVC的注释创建RESTful Web服务。

Spring的基于注释的MVC框架简化了创建RESTful Web服务的过程。传统的Spring MVC控制器和RESTful Web服务控制器之间的关键区别在于: 创建HTTP响应主体的方式。

虽然传统的MVC控制器依赖于View技术,但RESTful Web服务控制器只返回对象,对象数据作为JSON / XML直接写入HTTP响应。

以下步骤描述了典型的Spring MVC REST工作流:

  1. 客户端以URI形式向Web服务发送请求。
  2. 该请求被DispatcherServlet拦截,该服务器查找Handler Mappings及其类型。
  3. 应用程序上下文文件中定义的Handler Mappings部分告诉DispatcherServlet使用哪种策略根据传入请求查找控制器。
  4. 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(<font>"employees"</font><font>)
    <b>public</b> <b>class</b> EmployeeController {
        Employee employee = <b>new</b> Employee();
        @RequestMapping(value = </font><font>"/{name}"</font><font>, method = RequestMethod.GET, produces = </font><font>"application/json"</font><font>)
        <b>public</b> @ResponseBody Employee getEmployeeInJSON(@PathVariable String name) {
           employee.setName(name);
           employee.setEmail(</font><font>"employee1@genuitec.com"</font><font>);
        <b>return</b> employee; 
        }
    
        @RequestMapping(value = </font><font>"/{name}.xml"</font><font>, method = RequestMethod.GET, produces = </font><font>"application/xml"</font><font>)
        <b>public</b> @ResponseBody Employee getEmployeeInXML(@PathVariable String name) {
           employee.setName(name);
         employee.setEmail(</font><font>"employee1@genuitec.com"</font><font>);
           <b>return</b> employee; 
        }
    }
    </font>

    注意@ResponseBody添加到返回值中的每个@RequestMapping方法,Spring将做两件事:

    1. 将<context:component-scan> 和  <mvc:annotation-driven /> 标记添加  到Spring配置文件中。
    2. <context:component-scan> 激活注释并扫描包以在应用程序上下文中查找和注册bean。 
    3. <mvc:annotation-driven/> 如果Jackson / JAXB库在类路径上,则添加对读写JSON / XML的支持。 
    4. 对于JSON格式,包括jackson-databind jar,对于XML,包括项目类路径的jaxb-api-osgi jar。
  • 可在任何服务器(例如,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
    <b>public</b> <b>class</b> EmployeeController {
    
        Employee employee = <b>new</b> Employee();
    
        @GetMapping(<font>"/employees/{name}"</font><font>)
        <b>public</b> Employee getEmployeeInJSON(@PathVariable(</font><font>"name"</font><font>) String name) {
           employee.setName(name);
           employee.setEmail(</font><font>"employee1@genuitec.com"</font><font>);
           <b>return</b> employee;
        }
     
    }
    </font>

    我们不再需要将@ResponseBody添加到请求映射方法中。进行更改后,再次在服务器上运行应用程序会产生与以前相同的输出。

    使用@RestController非常简单,这是从Spring v4.0开始创建MVC RESTful Web服务或基于SpringBoot 2的首选方法。


  • 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

    查看所有标签

    猜你喜欢:

    本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

    轻量级Django

    轻量级Django

    茱莉亚·埃尔曼 (Julia Elman)、马克·拉温 (Mark Lavin) / 侯荣涛、吴磊 / 中国电力出版社; 第1版 / 2016-11-1 / 35.6

    自Django 创建以来,各种各样的开源社区已经构建了很多Web 框架,比如JavaScript 社区创建的Angular.js 、Ember.js 和Backbone.js 之类面向前端的Web 框架,它们是现代Web 开发中的先驱。Django 从哪里入手来适应这些框架呢?我们如何将客户端MVC 框架整合成为当前的Django 基础架构? 本书讲述如何利用Django 强大的“自支持”功......一起来看看 《轻量级Django》 这本书的介绍吧!

    JSON 在线解析
    JSON 在线解析

    在线 JSON 格式化工具

    随机密码生成器
    随机密码生成器

    多种字符组合密码

    HEX HSV 转换工具
    HEX HSV 转换工具

    HEX HSV 互换工具