@ResponseBody ResponseEntity

@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

 

posted @ 2018-12-09 19:48 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2738):重读vue电商网站48之通过 chainWebpack 自定义打包入口

示例代码如下&#xff1a; Javascript module.exports {chainWebpack: config > {config.when(process.env.NODE_ENV production, config > {config.entry(app).clear().add(./src/main-prod.js)})config.when(process.env.NODE_ENV development, config > {confi…

22图的遍历

图的遍历 图的遍历&#xff1a;搜索属于图的基本运算。树的先序遍历和按层遍历的推广。图的遍历也称搜索&#xff0c;主要有&#xff1a; 先深搜索&#xff08;depth-first search&#xff09;——深度优先搜索——dfs搜索 先广搜索&#xff08;breadth-first search&#xff0…

Cannot resolve symbol 'R',Failed to resolve: constraint-layout

1、当在github上下载demo项目在Android studio启动时&#xff0c;提示Cannot resolve symbol R。虽然提示错误&#xff0c;但是运行项目并没有问题 原因是gradle版本高于本地Android studio的gradle版本 把 classpath com.android.tools.build:gradle:3.3.1 改为 classpat…

Vue中import引入模块路径时的@符号

Vue中import引入模块路径时的符号 1、ES6 模块主要有两个功能&#xff1a;export 和 import export&#xff1a;用户对外输出本模块&#xff08;一个文件可以理解为一个模块&#xff0c;比如 aaa.js bbb.js&#xff09;变量的接口 。 import&#xff1a;用于在一个模块中加载另…

Android Log工具类,Toast工具类,获取当前方法名称

Log新晋工具方法 public class LgqLog {private static boolean ifShowtrue;private static int sCurrentLogLevel Log.DEBUG;private static String sPrefix null;IntDef({ Log.VERBOSE, Log.DEBUG, Log.INFO, Log.WARN, Log.ERROR })Retention(RetentionPolicy.SOURCE)publ…

npm run dev/build/serve

npm run dev/build/serve 1、ERR引发的思考 npm run dev npm ERR! missing script: devnpm ERR! A complete log of this run can be found in: npm ERR! E:\nodejs\node_cache\_logs\2018-12-12T15_06_08_674Z-debug.log 创建好的 vue 项目直接执行 vue run dev 报错&…

前端学习(2739):重读vue电商网站49之第三方库使用CDN

通过 externals 加载外部 CDN 资源 默认情况下&#xff0c;通过 import 语法导入的第三方依赖包&#xff0c;最终会被打包合并到同一个文件中&#xff0c;从而导致打包成功后&#xff0c;单文件体积过大的问题。 例如上述 chunk-vendors.js 体积很大&#xff0c;原因是全部 im…

Mysql--重点1

知识预览 sql语句规范数据类型数据库操作数据表操作表记录操作查询表记录(select)多表查询完整性约束回到顶部sql语句规范 sql是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集&#xff0c;是一种功能齐全的数据库语言。 在使用它时&…

6、jeecg 笔记之 自定义excel 模板导出(一)

6、jeecg 笔记之 自定义excel 模板导出&#xff08;一&#xff09; 1、前言 jeecg 中已经自带 excel 的导出导出功能&#xff0c;其所使用的是 easypoi&#xff0c;尽管所导出的 excel 能满足大部分需求&#xff0c; 但总是有需要用到自定义 excel 导出模板&#xff0c;下文所…

Android Lambda 表达式使用实例,-

1、Lambda表达式理解 Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数&#xff08;函数作为参数传递进方法中&#xff09;。 使用Lambda 表达式可以使代码变的更加简洁紧凑。 2、Lambda表达式…

前端学习(2740):重读vue电商网站50之Element-UI 组件按需加载

通过 CDN 优化 ElementUI 的打包 虽然在开发阶段&#xff0c;我们启用了 element-ui 组件的按需加载&#xff0c;尽可能的减少了打包的体积&#xff0c;但是那些被按需加载的组件&#xff0c;还是占用了较大的文件体积。此时&#xff0c;我们可以将 element-ui 中的组件&#…

买房费用

一、买房 首付&#xff1a;355940 贷款&#xff1a;520000 维修基金&#xff1a;7800 交房&#xff1a;23719 物业&#xff1a;2280 总价&#xff1a;909739 二、装修 水电改造&#xff1a;2970 防水材料&#xff1a;300 砖&#xff1a;11500 水泥&#xff1a;798 贴砖人工&…

8、jeecg 笔记之 自定义word 模板导出(一)

8、jeecg 笔记之 自定义word 模板导出&#xff08;一&#xff09; 1、前言 jeecg 中已经自带 word 的导出导出功能&#xff0c;其所使用的也是 easypoi&#xff0c;尽管所导出的 word 能满足大部分需求&#xff0c; 但总是有需要用到自定义 word导出模板&#xff0c;下文所用到…

Android 全屏抽屉fragment,NavigationView

1、首先是右→左进入动画 、slide_left.xml <?xml version"1.0" encoding"utf-8"?> <set xmlns:android"http://schemas.android.com/apk/res/android"><translateandroid:duration"800"android:fromXDelta"20…

20180307:python接口测试时json的传参与解析区分

女生节也要好好更新^_^ 有关python与json编码请查看上篇&#xff1a;http://www.cnblogs.com/hazelrunner/p/8444744.html 下面来区分&#xff0c;用post请求方法传json的两种方法&#xff1a; 传json参数&#xff08;方法中直接转json&#xff09;# coding:utf-8 import reque…

前端学习(2741):重读vue电商网站51之首页内容定制

不同的打包环境下&#xff0c;首页内容可能会有所不同。我们可以通过插件的方式进行定制&#xff0c;插件配置如下&#xff1a; Javascript chainWebpack: config > {config.when(process.env.NODE_ENV production, config > {config.plugin(html).tap(args > {args[…

Eclipse 创建第一个 springboot 应用

Eclipse 创建第一个 springboot 应用 1、前言 一直想把笔记整理出来&#xff0c;分享一下 springboot 的搭建&#xff1b; 因为私下 idea 用的比较多&#xff0c;使用比较方便&#xff0c;但恰逢小伙伴问起 eclipse 怎么搭建的问题&#xff0c; 顾整理以记之。 2、springboot …

Can't process attribute android:fillColor=@color/gray,添加vector属性报错解决方法

Android studio添加vector属性文件报错 vector属性文件 <vector xmlns:android"http://schemas.android.com/apk/res/android"android:width"24dp"android:height"24dp"android:viewportHeight"49.94"android:viewportWidth"4…

Maven parent.relativePath

Maven parent.relativePath 默认值为../pom.xml 查找顺序&#xff1a;relativePath元素中的地址–本地仓库–远程仓库 设定一个空值将始终从仓库中获取&#xff0c;不从本地路径获取&#xff0c;如<relativePath /> 转载于:https://www.cnblogs.com/ydymz/p/8520975.html…

前端学习(2742):重读vue电商网站52之路由懒加载

当打包构建项目时&#xff0c;JavaScript 包会变得非常大&#xff0c;影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块&#xff0c;然后当路由被访问的时候才加载对应组件&#xff0c;这样就更加高效了。 具体需要 3 步&#xff1a; 安装 babel/plugin-synt…