使用ResponseEntity作为的返回值的应用

 更新时间:2024年07月05日 08:39:54   作者:DanceDonkey  
这篇文章主要介绍了使用ResponseEntity作为的返回值的应用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

ResponseEntity作为的返回值

通常如果后端想响应json数据,我们需要在方法体上添加@Response注解,标注这个注解的方法的返回值会被spingmvc转为json形式并写入到响应体中。

但ResponseEntity则不会被springmvc转换,可以使用这个类定义响应头,状态码,响应体等。

@Controller
public class ResponseBodyTest {

    @ResponseBody
    @GetMapping("b1")
    public R b1(){
        //将方法的返回值转为json写入到响应体中
        return R.ok().put("msg","success");
    }

	@ResponseBody
    @GetMapping("b2")
    public ResponseEntity<String> b2(){
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.TEXT_PLAIN);
        String str = "hello,world";
        ResponseEntity responseEntity = new ResponseEntity<String>(str,httpHeaders,HttpStatus.OK);
        return responseEntity;
    }

}

我们 /b2 请求设置了@ResponseBody注解,但由于返回的是ResponseEntity对象,而且我们又重新设置了响应类型为 text/plain,我们访问b2请求查看结果:

心得

ResponseEntity的优先级高于@ResponseBody。

在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。如果响应类型是ResponseEntity可以不写@ResponseBody注解,写了也没有关系。

简单的说@ResponseBody可以直接返回Json结果, @ResponseEntity不仅可以返回json结果,还可以定义返回的HttpHeaders和HttpStatus。

统一结果返回 ResponseEntity

在正规的严格的企业的前后端系统开发中,返回严谨的状态码很有必要

平常大家为了统一格式返回,或许会自己封装一个ResultUtils,然后自定义ResultCode枚举类来返回,这样有些麻烦;

我们可以使用SpringMVC为我们封装的ResponseEntity对象来自定义状态码

源码:

public class ResponseEntity<T> extends HttpEntity<T> {
    private final Object status;

    public ResponseEntity(HttpStatus status) {
        this((Object)null, (MultiValueMap)null, (HttpStatus)status);
    }

    public ResponseEntity(@Nullable T body, HttpStatus status) {
        this(body, (MultiValueMap)null, (HttpStatus)status);
    }

    public ResponseEntity(MultiValueMap<String, String> headers, HttpStatus status) {
        this((Object)null, headers, (HttpStatus)status);
    }

    public ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, HttpStatus status) {
        super(body, headers);
        Assert.notNull(status, "HttpStatus must not be null");
        this.status = status;
    }

    private ResponseEntity(@Nullable T body, @Nullable MultiValueMap<String, String> headers, Object status) {
        super(body, headers);
        Assert.notNull(status, "HttpStatus must not be null");
        this.status = status;
    }

@param body: the entity body

  • ResponseEntity需要一个泛型T
  • 代表我们需要传入的数据对象

@param headers : the entity headers

  • 我们可以new MultiValueMap<String, String> headers
  • 设置响应头信息

@param status: the status code

  • 我们可以使用HttpStatus
  • 也可以自己定义状态码(Object)

HttpStatus status是一个包含了各种响应状态码的枚举类

// 201:创建成功   Created
// 203 :没有认证   NON_AUTHORITATIVE_INFORMATION
// 204: 成功没有返回值 No-content  一般是delete,update时使用
.....

例子:

	@GetMapping("/categories")
    public ResponseEntity<List<Category>> getCategoryList(String token){
        return new ResponseEntity<>(categoryService.queryAll(), HttpStatus.OK);
    }

    @PostMapping("/categories")
    public ResponseEntity<Category> AddCategory(String token, @RequestBody Category category){
        
        return new ResponseEntity<>(categoryService.insert(category),HttpStatus.CREATED);
    }

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java的NIO管道用法代码分享

    java的NIO管道用法代码分享

    这篇文章主要介绍了java的NIO管道用法代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • SpringBoot利用Undertow实现高可用的反向代理配置

    SpringBoot利用Undertow实现高可用的反向代理配置

    Undertow是一个采用Java开发的灵活的高性能Web服务器,本文将介绍如何利用 Undertow 服务器的反向代理能力,实现高可用的反向代理配置,感兴趣的可以了解下
    2025-06-06
  • Java中将 int[] 数组 转换为 List分享

    Java中将 int[] 数组 转换为 List分享

    这篇文章主要介绍了Java中将 int[] 数组 转换为 List分享的相关资料,需要的朋友可以参考下
    2022-12-12
  • Springmvc conver实现原理及用法解析

    Springmvc conver实现原理及用法解析

    这篇文章主要介绍了Springmvc conver实现原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java package编译乱码问题解决

    Java package编译乱码问题解决

    这篇文章主要介绍了Java package编译乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java线程本地变量导致的缓存问题解决方法

    Java线程本地变量导致的缓存问题解决方法

    使用缓存可以缓解大流量压力,显著提高程序的性能,我们在使用缓存系统时,尤其是大并发情况下,经常会遇到一些疑难杂症,这篇文章主要给大家介绍了关于Java线程本地变量导致的缓存问题的解决方法,需要的朋友可以参考下,
    2024-08-08
  • java实现文件归档和还原

    java实现文件归档和还原

    这篇文章主要为大家详细介绍了java实现文件归档和还原,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Java中fail-fast和fail-safe的使用

    Java中fail-fast和fail-safe的使用

    fail-fast和fail-safe是两种不同的迭代器行为,特别是在遍历集合时遇到并发修改的情况,本文主要介绍了Java中fail-fast和fail-safe的使用,感兴趣的可以了解一下
    2024-08-08
  • Java8新特性之线程安全日期类

    Java8新特性之线程安全日期类

    这篇文章主要介绍了Java8新特性之线程安全日期类,文中有非常详细的代码示例,对正在学习java的小伙伴们有一定的帮助,需要的朋友可以参考下
    2021-04-04
  • java中关于转义字符的一个bug

    java中关于转义字符的一个bug

    本文主要介绍了java中关于转义字符的一个bug。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02

最新评论