@ResponseBody ResponseEntity
1、产生疑问
我们知道,如果在 Controller 的某个方法上加上 @ResponseBody 注解,那么你就能拿到 json 数据。
如果你只是知道这么用,那么你应该知道 ResponseBody 的具体作用:
其将方法的返回值通过适当的转换器转换为指定的格式之后,写入到 response 对象的 body 区,通常用来给客户端返回 JSON 数据或者是 XML 数据,当方法上面没有写 ResponseBody 时,底层会将方法的返回值封装为 ModelAndView 对象;需要注意的是,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过 response 对象输出指定格式的数据。
来看看 ResponseEntity:

首先我们清楚,@RestController = Controller + ResponseBody
但是,这个 ResponseEntity 是个什么鬼?
2、尝试理解
还记得 http 请求包含什么吗?
请求头、请求行、请求体;响应头、响应体、响应行(状态码)
而 @ResponseBody 只是作为一个响应体。
也就是在典型的 spring mvc 应用中,请求点通常返回 html 页面。
有时我们仅需要实际数据,如使用ajax请求。
这时我们能通过 @ResponseBody 注解标记请求处理方法,审批人能够处理方法结果值作为http响应体。
说到响应体,就得扯到状态码了,毕竟光有响应体不行呀,我们经常遇到的那个 404 就是个状态码;
放在注解中就是 @ResponseStatus。
那么这些跟 ResponseEntity 有什么关系?
ResponseEntity 太强大,ResponseBody 、 ResponseStatus 让使用更加便捷;
看一下 ResponseEntity.class

ResponseEntity 继承了 HttpEntity,是 HttpEntity 的子类且可以添加 HttpStatus 状态码,被用于 RestTemplate(后面文章单独讲解) 和 Controller 层方法。
通过代码继续分析:
@GetMapping("list")
public ResponseEntity<List<Category>> queryCategoryListByPid(@RequestParam("pid")Long pid){
return ResponseEntity.ok( mCategoryService.queryCategoryListByPid(pid) );
}
ResponseEntity <T> ,泛型T 表示要设置的返回的 响应体,而 ResponseEntity.ok() 表示设置的状态码 200,而 ResponseEntity.ok() 其实是一种快捷的写法,如果不这样写的话:
@GetMapping("list")
public ResponseEntity<List<Category>> queryCategoryListByPid(@RequestParam("pid")Long pid){
//return ResponseEntity.status(200).body(mCategoryService.queryCategoryListByPid(pid));
//或者
return ResponseEntity.status(HttpStatus.OK).body(mCategoryService.queryCategoryListByPid(pid));
}
3、总结
尽管 ResponseEntity 非常强大,但不应该过度使用。
在一些简单情况下,还有其他方法能满足我们的需求,使代码更整洁。
ResponseBody ResponseStatus
@ResponseBody ResponseEntity的更多相关文章
- Spring boot中使用springfox来生成Swagger Specification小结
Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...
- Spting使用memcached
applicationContext.xml配置文件: <?xml version="1.0" encoding="UTF-8"?> <bea ...
- JavaHTTP下载视频
控制层类: package com.grab.video.controller; import java.io.BufferedOutputStream; import java.io.Buffere ...
- Spring MVC异常处理详解(转)
下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现HandlerExceptionReso ...
- Spring MVC 注解之controller层
第一层注解:@Controller 和 @RestController. 这两个注解的作用是:处理页面的HTTP请求,不同点 @RestController相当于@Controller +@Respo ...
- 超详细 Spring @RequestMapping 注解使用技巧
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一.这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上. 在这篇文章中,你将会看到 @R ...
- Spring Boot REST(一)核心接口
Spring Boot REST(一)核心接口 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...
- SpringCloud 天气预报系统 Quartz集成
https://blog.csdn.net/csdn_wangchen/article/details/79402097 继上一次的redis集成后,有了很大的改观,但是缺少数据的同步.------& ...
- Spring MVC异常处理详解 ExceptionHandler good
@ControllerAdvice(basePackageClasses = AcmeController.class) public class AcmeControllerAdvice exten ...
随机推荐
- Vofuria ARCamera相机问题
想要发射 射线 Camera.allCameras[0] 该语句来选择相机:Camera.main 此语句只能找到Tag为MainCamera的相机:
- Emacs Org-mode 1 下载、安装、基本使用
1.1 总述 Org 是一种帮助我们做笔记.日常事件或者项目计划的快速高效的文本格式系统. Org 有以下特点: Org mode 基于组织结构(outline-mode)对文本进行组织.具有良好的快 ...
- Maven mvn install 本地jar添加到本地maven仓库中
mvn install:install-file -DgroupId=alipay -DartifactId=taobao-sdk-java-auto -Dversion=1.0 -Dpackagin ...
- eclipse 界面开发--windowbuilder
插件地址: http://www.eclipse.org/windowbuilder/download.php http://www.eclipse.org/windowbuilder/
- 01.pandas
01.Series # -*- coding: utf-8 -*- """ Series 객체 특징 - pandas 제공 1차원 자료구성 - DataFrame 칼 ...
- Torch功能点记录
1. Numpy矩阵转换Tensor: tensor_num = torch.from_numpy(numpy_arr)
- PYQT窗口可视化编程
1.用PYQT的Qt设计师设计完程序UI后,将其转换为UI.py脚本. 转换步骤见帖:http://www.cnblogs.com/doudongchun/p/3694765.html 2.在同目录下 ...
- centos7下NFS使用与配置
NFS是Network File System的缩写,即网络文件系统.客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下. nfs为什么需要RPC?因为NFS支持的功能很多,不同功能会 ...
- vcs编译verilog/sysverilog并执行
命令: sverilog:表示支持systemverilog,如果只编译verilog不需要加 test.sv :这个可以是一个systemverilog/verilog文件,也可以是一个filel ...
- 配置Mqtt
一.java后台调用MQTT 准备工作:需要导入的jar包 <!-- mqtt依赖包--> <dependency> <groupId>org.fusesource ...