购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2.4 ResponseEntity

Spring Boot框架提供了ResponseEntity类,这是一个内建的封装类,用于在RESTful Web服务中更精细地控制HTTP响应。

ResponseEntity用于全面控制HTTP响应,包括状态码、头部信息和响应体内容。它在RESTful Web服务中尤其有用,因为它允许根据不同的场景返回不同的HTTP状态,以下是ResponseEntity的主要特点和常见用途。

完整的HTTP响应控制:能够精确控制响应的每个部分,包括头部信息、状态码和响应体。

链式语法:通过ResponseEntity的ok()、notFound()、badRequest()等静态方法,可以方便地构建不同类型的响应。

泛型支持:ResponseEntity<T>允许定义响应体的具体类型,增加了返回类型的灵活性和明确性。

例如,下面的代码展示了如何在一个RESTful API中使用ResponseEntity类来返回不同的HTTP状态和数据。

    @GetMapping("/item/{id}")
    public ResponseEntity<Item> getItem(@PathVariable Long id) {
        Item item = itemService.findById(id); // 调用服务层获取Item,此处仅为模拟
        if (item != null) {
            // 如果找到Item,返回状态码200 OK和Item对象
            return ResponseEntity.ok(item);
        } else {
            // 如果没有找到Item,返回状态码404 Not Found
            return ResponseEntity.notFound().build();
        }
    }

在这个例子中,根据itemService.findById(id)的结果,代码会返回相应的HTTP响应。如果找到了Item对象,它返回状态码为200 OK的响应和Item对象。如果未找到,它返回状态码为404 Not Found的响应,没有响应体。

ResponseEntity也可以返回自定义头部信息。例如,以下代码展示了如何设置HTTP响应头来指示浏览器下载文件,而不是直接在浏览器中显示它。

    @GetMapping("/item/{id}/download")
    public ResponseEntity<Resource> downloadItem(@PathVariable Long id) {
        Resource resource = itemService.findResourceById(id); // 从服务层获取资源
        // 设置响应头,指示内容为附件并提供文件名
        return ResponseEntity.ok()
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""
    + resource.getFilename() + "\"")
            .body(resource); // 设置响应体为资源内容
    }

在这个例子中,header()方法用于设置Content-Disposition响应头,告诉浏览器这是一个要下载的文件。resource.getFilename()用于从资源对象中获取文件名。使用.body(resource)设置响应体,包含了要下载的资源。 W1iSS6UsEjs8lXZwDjxmsRbovG2/zIrbwJokUXDeWQvb6uc/kteUE1h1fKzOy9yR

点击中间区域
呼出菜单
上一章
目录
下一章
×