使用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观察者模式之实现对象间的一对多依赖

    Java观察者模式之实现对象间的一对多依赖

    这篇文章主要介绍了Java观察者模式之实现对象间的一对多依赖的方法,Java观察者模式是一种行为型设计模式,用于实现对象之间的消息传递和通信,文中有详细的实现步骤和代码示例,,需要的朋友可以参考下
    2023-05-05
  • Java并发编程之Semaphore(信号量)详解及实例

    Java并发编程之Semaphore(信号量)详解及实例

    这篇文章主要介绍了Java并发编程之Semaphore(信号量)详解及实例的相关资料,需要的朋友可以参考下
    2017-06-06
  • Java如何实现自定义异常类

    Java如何实现自定义异常类

    这篇文章主要介绍了Java如何实现自定义异常类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决IDEA中快捷键Alt+Enter不能使用的问题

    解决IDEA中快捷键Alt+Enter不能使用的问题

    这篇文章主要介绍了解决IDEA中快捷键Alt+Enter不能使用的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • SpringBoot启动并初始化执行sql脚本问题

    SpringBoot启动并初始化执行sql脚本问题

    这篇文章主要介绍了SpringBoot启动并初始化执行sql脚本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • 将15位身份证补全为18位身份证的算法示例详解

    将15位身份证补全为18位身份证的算法示例详解

    这篇文章主要给大家介绍了关于将15位身份证补全为18位身份证算法的相关资料,文中通过示例代码给大家介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Spring框架中Bean的三种配置和实例化方法总结

    Spring框架中Bean的三种配置和实例化方法总结

    在Spring框架中,Bean的配置和实例化是很重要的基础内容,掌握各种配置方式,才能灵活管理Bean对象,本文将全面介绍Bean的别名配置、作用范围配置,以及构造器实例化、工厂实例化等方式
    2023-10-10
  • Spring Cloud负载均衡组件Ribbon原理解析

    Spring Cloud负载均衡组件Ribbon原理解析

    本文主要讲述了微服务体系下的 Spring Cloud Netflix 套件中 Ribbon 的使用,并结合部分源码讲述了 Ribbon 的底层原理,重点讲述了 Ribbon 中是如何获取服务以及如何判定一个服务是否可用,最后也介绍了 Ribbon 中默认提供的 7 种负载均衡策略,感兴趣的朋友一起看看吧
    2022-04-04
  • Java OpenCV图像处理之背景切换

    Java OpenCV图像处理之背景切换

    这篇文章主要介绍了利用Java OpenCV实现图像背景的切换,文中的示例代码讲解详细。对我们学习OpenCV有一定帮助,感兴趣的同学可以了解一下
    2022-01-01
  • 解决Netty解码http请求获取URL乱码问题

    解决Netty解码http请求获取URL乱码问题

    这篇文章主要介绍了解决Netty解码http请求获取URL乱码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论