@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 阅读( ...) 评论( ...) 编辑 收藏
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niceyoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值