Spring框架:@RestController与@Controller

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

内容简介:了解如何利用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的首选方法。


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

    查看所有标签

    猜你喜欢:

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

    Kafka技术内幕

    Kafka技术内幕

    郑奇煌 / 人民邮电出版社 / 2017-11 / 119.00元

    Kafka自LinkedIn开源以来就以高性能、高吞吐量、分布式的特性著称,本书以0.10版本的源码为基础,深入分析了Kafka的设计与实现,包括生产者和消费者的消息处理流程,新旧消费者不同的设计方式,存储层的实现,协调者和控制器如何确保Kafka集群的分布式和容错特性,两种同步集群工具MirrorMaker和uReplicator,流处理的两种API以及Kafka的一些高级特性等。一起来看看 《Kafka技术内幕》 这本书的介绍吧!

    HTML 编码/解码
    HTML 编码/解码

    HTML 编码/解码

    SHA 加密
    SHA 加密

    SHA 加密工具

    HEX CMYK 转换工具
    HEX CMYK 转换工具

    HEX CMYK 互转工具