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的首选方法。


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

    查看所有标签

    猜你喜欢:

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

    A Byte of Python

    A Byte of Python

    Swaroop C H / Lulu Marketplace / 2008-10-1 / USD 27.98

    'A Byte of Python' is a book on programming using the Python language. It serves as a tutorial or guide to the Python language for a beginner audience. If all you know about computers is how to save t......一起来看看 《A Byte of Python》 这本书的介绍吧!

    XML 在线格式化
    XML 在线格式化

    在线 XML 格式化压缩工具

    RGB CMYK 转换工具
    RGB CMYK 转换工具

    RGB CMYK 互转工具

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

    HEX HSV 互换工具