SpringBoot ResponseEntity标识Http响应

这篇具有很好参考价值的文章主要介绍了SpringBoot ResponseEntity标识Http响应。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料

  1. 使用spring ResponseEntity处理http响应
  2. 使用ResponseEntity处理API返回


一. 说明

ResponseEntity用来标识整个Http响应,可以标识状态码,Head头部信息,以及响应体。

  • ResponseEntity的优先级高于@ResponseBody。
    在返回值不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。
    如果响应类型是ResponseEntity可以不写@ResponseBody注解,便可返回JSON数据或其他类型的数据,如果同时使用ResponseEntity和@ResponseBody注解也不会报错。

  • ResponseEntity是在 org.springframework.http.HttpEntity 的基础上添加了http status code(http状态码)。作用是和@ResponseStatus@ResponseBody结合起来的功能一样的。

  • @ResponseBody可以直接返回JSON结果, @ResponseEntity不仅可以返回JSON结果,还可以返回自定义的HttpHeaders和HttpStatus。文章来源地址https://www.toymoban.com/news/detail-778025.html


二. ResponseEntity.ok().headers(响应头).body(响应体)

  • 可用于文件下载
  • 与直接向HttpServletResponse中写入OutputStream和header的效果相同
  • HttpServletResponse是servlet式的写法,而ResponseEntity是Springt式的写法
  • new ResponseEntity<>(响应体, 响应头, 状态码) 是非简写方式
  • ResponseEntity.ok().headers(响应头).body(响应体) 是简写方式
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;

import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@GetMapping("/testResponseEntity1")
public ResponseEntity<byte[]> testResponseEntity1() throws Exception {

    // 读取本地的文件
    String filePath = "/temp/A110120119/测试文件.text";
    ClassPathResource readFile = new ClassPathResource(filePath);

    // 设置响应头,把文件名称放入响应头中,确保文件可下载
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Disposition", "attachment;filename=" + URLEncoder.encode(readFile.getFilename(), "UTF-8"));
    // 设置内容类型为「application/octet-stream」二进制流
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

    // 获取File对象
    File file = readFile.getFile();
    Path path = Paths.get(file.toURI());
    // 获取File对象的字节码文件
    byte[] bytes = Files.readAllBytes(path);

    /*
     * 表示返回一个字节码类型的响应
     * 同时设置了响应头和状态码
     * */
    if (ObjectUtils.isEmpty(readFile.getFilename())) {
        // 👉👉👉简写形式
        return ResponseEntity.ok().headers(headers).body(bytes);
    }

    // 👉👉👉非简写形式
    return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}

三. ResponseEntity.ok(响应内容)

  • 请求成功,直接把后台的数据响应给前台
@GetMapping("/testResponseEntity2")
public ResponseEntity<List<String>> testResponseEntity2() {

    List<String> list = Arrays.asList("1", "2");
    return ResponseEntity.ok(list);
}
  • 与下面这种写法功能相同
@GetMapping("/testResponseEntity2")
@ResponseBody
public List<String> testResponseEntity2() {

    List<String> list = Arrays.asList("1", "2");
    return list;
}

四. ResponseEntity<Void>

  • HttpStatus.NO_CONTENT状态码为204,表示服务器成功的处理了请求,但是没有返回任何内容
  • 多用于 更新删除 的时候,响应给前台一个状态码,表示操作成功。
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@GetMapping("/testResponseEntity3")
public ResponseEntity<Void> testResponseEntity3(String param) {

    // ⏹http状态码 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
    if (ObjectUtils.isEmpty(param)) {
    	// ⏹简写方式
        return ResponseEntity.noContent().build();
    }
	
	// ⏹非简写方式
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

五. ResponseEntity.status(状态码)

  • 用于向前台返回指定的状态码,还可以返回Header和响应内容
  • HttpStatus.CREATED201状态码表示请求成功并且服务器创建了新的资源。
@GetMapping("/testResponseEntity4")
public ResponseEntity<Void> testResponseEntity4() {
	
	// 向数据库中插入数据
	// ......
	
    // ⏹http状态码 201 (已创建) 请求成功并且服务器创建了新的资源。
    return ResponseEntity.status(HttpStatus.CREATED).build();
}

@GetMapping("/testResponseEntity5")
public ResponseEntity<String> testResponseEntity5(String param) {
	
	// 如果参数不存在就返回默认的图片url,并返回状态码201
    if (!ObjectUtils.isEmpty(param)) {
        return new ResponseEntity<>("默认的图片URL", HttpStatus.CREATED);
    }
	
	// 向数据库中插入图片,并返回能访问图片地址的url
	// ......
	// ⏹用于插入数据成功之后返回数据给前台

    // ⏹201 状态码,并返回图片的url
    return ResponseEntity.status(HttpStatus.CREATED).body("图片的url");
}

六. ResponseEntity.status(状态码).body(响应体)

  • HttpStatus.BAD_REQUEST表示状态码400,异常的请求。
@GetMapping("/testResponseEntity6")
public ResponseEntity<Map<String, Object>> testResponseEntity6(String param) {
	
	// 用来存放校验信息的Map
    Map<String, Object> map = new HashMap<>();
	
	// 进行参数校验
    if (param == null) {
    	// 参数为null,直接返回错误码400
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    } else if ("".equals(param.trim())){
    	// 参数为空字符串,返回错误码400的同时,还返回错误信息
        map.put("errorMsg","参数为空");
        return ResponseEntity.badRequest().body(map);
    }

    // 200 状态码,并指定请求成功的响应体
    map.put("successMsg", "参数通过校验");
	
    return ResponseEntity.status(HttpStatus.OK).body(map);
    
    // 这种写法更加简单,本质上和上面是一种写法
    // return ResponseEntity.ok(map);
}

七. 前台ajax

$.ajax({
    url: `请求URL`,
    type: '请求方式',
    // data: JSON.stringify(param),
    // 向服务器发送的数据类型
    // contentType: 'application/json;charset=utf-8',
    // dataType: 'json',
    success: function (data, status, xhr) {

        // 请求成功的响应体
        console.log(data);

        // 请求成功的状态文字描述(success,nocontent等)
        console.log(status);

        // 请求成功的状态码(200,201,204等)
        const {
            status: stateCode
        } = xhr;
        console.log(stateCode);
    },
    error(xhr, status, error) {

        const {
            // 请求异常时的json格式响应体
            responseJSON,
            // 请求异常时的文本响应内容
            responseText,
            // 请求异常时的状态码
            status: stateCode
        } = xhr;
        console.log(responseJSON);
        console.log(responseText);
        console.log(stateCode);

        // 请求成功的状态文字描述(error等)
        console.log(status);
    }
});

到了这里,关于SpringBoot ResponseEntity标识Http响应的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码

    通过自定义filter,RequestWrapper,ResponseWrapper 处理请求和响应数据,比如修改请求体和响应体的字符编码 1.request 和 response 中的数据都是 存在流中的(缓存中)获取一次就没有了,需要重新写回去。所以需要两个包装类分别继承HttpServletRequestWrapper 和 HttpServletResponseWrapper 对 r

    2024年02月15日
    浏览(42)
  • Springboot启用HTTP响应压缩

    官方文档:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/htmlsingle/#how-to-enable-http-response-compression

    2024年02月13日
    浏览(39)
  • Spring Security漏洞防护—HTTP 安全响应头

    Spring Security提供了 一套默认的安全HTTP响应头,以提供安全默认值。虽然这些头信息中的每一个都被认为是最佳实践,但应该注意的是,并不是所有的客户端都使用这些头信息,所以鼓励进行额外的测试。 你可以定制特定的header。例如,假设你想使用默认值,但你希望为 X-

    2024年02月03日
    浏览(38)
  • Spring Security 6.x 系列【46】漏洞防护篇之安全相关的HTTP响应头

    有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo

    2024年02月07日
    浏览(45)
  • JavaWeb:vue、AJax、ELement、maven、SpringBoot、、Http、Tomcat、请求响应、分层解耦

    VUE是前端框架,基于MVVM,实现数据双向绑定 框架是半基础软件,可重用的代码模型  Vue-cli 是Vue官方提供的一个脚手架,用于快速生成一个 Vue 的项目模板 1 统一的目录结构 2 本地调试 3 热部署:代码变动,不需要重新运行,就可以加载最新的程序 4 单元测试 5 集成打包

    2024年04月14日
    浏览(53)
  • 微信小程序登录获取用户唯一标识OpenId,(SpringBoot项目)

    微信小程序的登录,需要获取到用户的唯一标识OpenId,这里只涉及到后端代码,所以前提是前端申请了一个小程序并且有了appid和secret。 文章目录 一、微信小程序登录流程 二、代码实现 1.引入相关依赖 2.代码实现 实际项目经验分享 先上官方开发文档连接 小程序登录 | 微信

    2024年02月12日
    浏览(55)
  • Http---HTTP响应报文

    1. HTTP响应报文分析 HTTP 响应报文效果图: 响应报文说明: 原始响应报文说明: 说明: 每项数据之间使用: rn 2. HTTP 状态码介绍 HTTP 状态码是 用于表示web服务器响应状态的3位数字代码 。 状态码 说明 200 请求成功 307 重定向 400 错误的请求,请求地址或者参数有误 404 请求资源在服

    2024年03月10日
    浏览(50)
  • 【Spring MVC】获取 @RequsetBody 标识的对象,使用适配器模式增加代码可读性

    一个技术需求引发的思考和实践: 思考 用 AOP 把校验代码 实践 用 Spring MVC 的 RequestBodyAdvice 做AOP逻辑 继承 RequestBodyAdviceAdapter 实现自己的 适配器 用自己的适配器让代码可读性增加 熟悉 Spring MVC 、Java 反射的一些实践 本文内容 澄清一个AOP校验JSON内容的思路 复习适配器模式

    2024年02月10日
    浏览(44)
  • HTTP常见响应码以及响应码代表的内容

    很有意思的一个段子 : 消息: 描述: 100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。 101 Switching Protocols 服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。 消息: 描述: 200 OK 请求成功(其后是对GET和P

    2024年02月07日
    浏览(45)
  • HTTP工具类封装与http请求响应

    一、前言 在Java web系统中经常需要与外部接口进行对接,比较多的方式就是是http的方式。在springboot中,我们可以直接使用封装的feign如:我们去请求微信的接口,定义一个client客户端,使用feign框架去请求就可以。但是也有很多系统没有使用feign的框架,那就需要使用http工具

    2024年04月25日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包