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的更多相关文章

  1. Spring boot中使用springfox来生成Swagger Specification小结

    Rest接口对应Swagger Specification路径获取办法: 根据location的值获取api   json描述文件 也许有同学会问,为什么搞的这么麻烦,api json描述文件不就是h ...

  2. Spting使用memcached

    applicationContext.xml配置文件: <?xml version="1.0" encoding="UTF-8"?> <bea ...

  3. JavaHTTP下载视频

    控制层类: package com.grab.video.controller; import java.io.BufferedOutputStream; import java.io.Buffere ...

  4. Spring MVC异常处理详解(转)

    下图中,我画出了Spring MVC中,跟异常处理相关的主要类和接口. 在Spring MVC中,所有用于处理在请求映射和请求处理过程中抛出的异常的类,都要实现HandlerExceptionReso ...

  5. Spring MVC 注解之controller层

    第一层注解:@Controller 和 @RestController. 这两个注解的作用是:处理页面的HTTP请求,不同点 @RestController相当于@Controller +@Respo ...

  6. 超详细 Spring @RequestMapping 注解使用技巧

    @RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一.这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上. 在这篇文章中,你将会看到 @R ...

  7. Spring Boot REST(一)核心接口

    Spring Boot REST(一)核心接口 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10117436.html) SpringBoot RE ...

  8. SpringCloud 天气预报系统 Quartz集成

    https://blog.csdn.net/csdn_wangchen/article/details/79402097 继上一次的redis集成后,有了很大的改观,但是缺少数据的同步.------& ...

  9. Spring MVC异常处理详解 ExceptionHandler good

    @ControllerAdvice(basePackageClasses = AcmeController.class) public class AcmeControllerAdvice exten ...

随机推荐

  1. php 常用的自定义函数

    1. 发送 SMS 在开发 Web 或者移动应用的时候,经常会遇到需要发送 SMS 给用户,或者因为登录原因,或者是为了发送信息.下面的 PHP 代码就实现了发送 SMS 的功能. 为了使用任何的语言 ...

  2. Centos 7 telnet 详解

    telnet命令 telnet命令用于登录远程主机,对远程主机进行管理.telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了.但仍然有 ...

  3. Git使用七:修改最后一次提交、删除文件和重命名文件

    修改最后一次提交: 在实际开发中,可能会遇到以下两种情景:情景一:版本刚一提交(commit)到仓库,突然想起漏掉两个文件还没有添加(add).情景二:版本刚一提交(commit)到仓库,突然想起版本 ...

  4. bootstrap-datetimepicker的中文显示问题

    bootstrap-datetimepicker的本地化显示依赖于moment插件.也就是说moment插件提供了多语言的内容支持,而bootstrap-datetimepicker没有语言内容. 为 ...

  5. 关于CentOS

    dd if=/dev/cdrom of=centos72.iso 自动挂载镜像: vi /etc/fstab /root/centos72.iso   /mnt/cdrom   iso9660  de ...

  6. Java Spring Boot VS .NetCore (二)实现一个过滤器Filter

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  7. mybatis 开发规范

  8. 一次lr异常Error: C interpreter run time error: Action.c (17): Error -- memory violation : Exception ACCESS_VIOLATION received问题分析

    今天qq群里人问我一个问题 人家的原始问题如下: 问题是为啥通过lr_save_string取不到参数值 由于别的问题,我也需要调试,但是没有环境,只能模拟场景,如下 他想将token变量换成lr中的 ...

  9. spark DataFrame的创建几种方式和存储

    一. 从Spark2.0以上版本开始,Spark使用全新的SparkSession接口替代Spark1.6中的SQLContext及HiveContext接口来实现其对数据加载.转换.处理等功能.Sp ...

  10. Palindrome POJ - 3974 (字符串hash+二分)

    Andy the smart computer science student was attending an algorithms class when the professor asked t ...