@ResponseBody注解的作用

@ResponseBody的作用就是将返回的对象通过MessageConverter处理之后,写入response的outputStream中返回。大致流程如下

1.在DispatcherServlet中调用doDispatch方法,该方法中有如下代码。这里的ha为RequestMappingHandlerAdapter,这个对象怎么来的,简单点说就是通过request的请求路径匹配到执行器链,通过执行器链中的处理器匹配到对应的适配器,暂时不做深入讨论。

2.handle方法会走到RequestMappingHandlerAdapter的handleInternal中

3.调用invokeHandlerMethod方法

4.查看invokeAndHandle方法,这里就到了本文的重点了

5.查看handleReturnValue

6.查看selectHandler

7.这里遍历预置的处理器是否支持返回值的类型。这里的returnValueHanlers比较多,有15个。对应@ResponseBody注解的为RequestResponseBodyMethodProcessor。直接看该对象的supportsReturnType方法。

8.匹配到RequestResponseBodyMethodProcessor之后就执行该第5步中该对象的handleReturnValue

到此,@ResponseBody注解的作用就讲完了。

顺带一提,配置了视图解析器之后,通常情况下为ViewNameMethodReturnValueHandler这个类来处理视图。

这里是15个returnValueHandler的截图

总结:简单的讲,@ResponseBody注解就是为了RequestResponseBodyMethodProcessor处理返回值提供标识。

如有不对之处望指教。

原文地址:https://www.cnblogs.com/guyaoblog/p/11382057.html

时间: 2024-10-11 14:31:25

@ResponseBody注解的作用的相关文章

@responseBody注解的使用

1. @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML 数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据. 2. @RequestMapping("/login") @ResponseBody public User login(User user){

SpringMVC学习八 @ResponseBody注解

(一)在方法上只有@RequestMapping 时,无论方法返回值是什么认为需要跳转,代码实例如下 @RequestMapping("demo10") public People fun10() { People pl=new People(); pl.setName("张三"); pl.setAge(12); return pl; } 如果不希望跳转,可以把控制器的返回值设置为void ,或者加上注解@ResponseBody 代码如下 @RequestMapp

@RequestBody, @ResponseBody 注解详解(转)

引言: 接上一篇文章讲述处理@RequestMapping的方法参数绑定之后,详细介绍下@RequestBody.@ResponseBody的具体用法和使用时机:同时对曾经看的一篇文章中讲述的某些部分进行澄清 (文章地址:http://www.byywee.com/page/M0/S702/702424.html). 简介: @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的

@RequestBody 和@ResponseBody 注解详解

简介: @RequestBody 作用: i) 该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上: ii) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上. 使用时机: A) GET.POST方式提时, 根据request header Content-Type的值来判断: application/x-www-form-urlencod

关于responseBody注解中文乱码的问题解决

在web.xml中定义字符集过滤器: <filter> <filter-name>SpringEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name>

@RequestBody, @ResponseBody 注解理解

@RequestBody, @ResponseBody 注解理解 自己以前没怎么留意过,来实习后公司采用前后端分离的开发方式,前后端拿到的注释都是 json 格式的,这时候 @RequestBody, @ResponseBody 这两个注解就非常好用,下面详细介绍用法: @RequestBody 1. 作用: 该注解用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到要返回的对象上: 再把 HttpM

SpringMVC源码剖析5:消息转换器HttpMessageConverter与@ResponseBody注解

转自 SpringMVC关于json.xml自动转换的原理研究[附带源码分析] 本系列文章首发于我的个人博客:https://h2pl.github.io/ 欢迎阅览我的CSDN专栏:Spring源码解析 https://blog.csdn.net/column/details/21851.html 部分代码会放在我的的Github:https://github.com/h2pl/ 目录 前言 现象 源码分析 实例讲解 关于配置 总结 参考资料 前言 SpringMVC是目前主流的Web MVC

SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面

导包: 除了一些spring的包之外,还需要jackson-annotations.jar , jackson-core.jar , jackson-databind.jar 这三个包 开启@ResponseBody注解: 在 spring-mvc.xml 中通过<mvc:annotation-driven />开启@ResponseBody注解 使用@ResponseBody标注业务方法 package com.loger.controller; import java.util.Array

在SpringMVC中使用@RequestBody和@ResponseBody注解处理json时,报出HTTP Status 415的解决方案

我在使用SpringMVC的@RequestBody和@ResponseBody注解处理JSON数据的时候,总是出现415的错误,说是不支持所提交数据格式,我在页面中使用了JQuery的AJAX来发出JSON数据给服务器: $.ajax({ type:'post', url:'${pageContext.request.contextPath }/requestJSON.action', contentType :'application/json;charset=utf-8', //数据是JS