欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于ResponseEntity類和HttpEntity及跨平臺路徑問題

 更新時間:2024年07月11日 08:40:59   作者:魚找水需要時間  
這篇文章主要介紹了關(guān)于ResponseEntity類和HttpEntity及跨平臺路徑問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 簡介

使用spring時,達(dá)到同一目的通常有很多方法,對處理http響應(yīng)也是一樣。本文我們學(xué)習(xí)如何通過ResponseEntity設(shè)置http相應(yīng)內(nèi)容、狀態(tài)以及頭信息。

ResponseEntity是HttpEntity的擴(kuò)展,添加一個HttpStatus狀態(tài)代碼。在RestTemplate和@Controller方法中使用。

ResponseEntity標(biāo)識整個http相應(yīng):狀態(tài)碼、頭部信息以及相應(yīng)體內(nèi)容。因此我們可以使用其對http響應(yīng)實(shí)現(xiàn)完整配置

理解:

  • ResponseEntity的優(yōu)先級高于@ResponseBody。在不是ResponseEntity的情況下才去檢查有沒有@ResponseBody注解。如果響應(yīng)類型是ResponseEntity可以不寫@ResponseBody注解,寫了也沒有關(guān)系。
  • ResponseEntity 是在 org.springframework.http.HttpEntity 的基礎(chǔ)上添加了http status code(http狀態(tài)碼),用于RestTemplate以及@Controller的HandlerMethod。它在Controller中或者用于服務(wù)端響應(yīng)時,作用是和@ResponseStatus與@ResponseBody結(jié)合起來的功能一樣的。用于RestTemplate時,它是接收服務(wù)端返回的http status code 和 result的。
  • 簡單粗暴的講 @ResponseBody可以直接返回Json結(jié)果, @ResponseEntity不僅可以返回json結(jié)果,還可以定義返回的HttpHeaders和HttpStatus

2. 使用

2.1 RestTemplate

ResponseEntity<String> entity = template.getForEntity("https://hello.com", String.class);
String body = entity.getBody();
MediaType contentType = entity.getHeaders().getContentType();
HttpStatus statusCode = entity.getStatusCode();

2.2 Controller

@RestController
@RequestMapping("/demo")
public class DemoController {

    @GetMapping("/get")
    public ResponseEntity<String> get() {
        return ResponseEntity.ok("hello");
    }
}

2.3 指定響應(yīng)狀態(tài)碼

靜態(tài)方式

@GetMapping("/get")
public ResponseEntity<String> get() {
    return ResponseEntity.status(HttpStatus.LOCKED).body("服務(wù)不可用");
}

也可以通過非靜態(tài)方式構(gòu)建

@GetMapping("/get")
public ResponseEntity<String> get() {
    ResponseEntity responseEntity = new ResponseEntity("服務(wù)不可用", HttpStatus.LOCKED);
    return responseEntity;
}

2.4 自定義響應(yīng)頭

@GetMapping("/get")
public ResponseEntity<String> get() {
    return ResponseEntity.ok()
        .header("Custom-Header", "lisa")
        .body("Custom header set");
}

2.5 下載文件

 @GetMapping("/download")
    public ResponseEntity<byte[]> get() throws IOException {
        // 你放的文件路徑
        String filePath = "C:" + File.separator + "Users" + File.separator + "admin002" + File.separator + "Desktop" + File.separator + "work" + File.separator + "img";
        File file = new File(filePath + File.separator + "java.png");
        // 設(shè)置一個head
        HttpHeaders headers = new HttpHeaders();
        // 文件的屬性,也就是文件叫什么
        headers.setContentDispositionFormData("attachment", "1.png");
        // 內(nèi)容是字節(jié)流
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        // 開始下載
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
    }

2.6 直接操作HttpServletResponse

Spring 也允許我們直接 javax.servlet.http.HttpServletResponse 對象;只需要申明其作為方法參數(shù):

@GetMapping("/get")
public void get(HttpServletResponse response) throws IOException {
    response.setHeader("Custom-Header", "lisa");
    response.setStatus(200);
    response.getWriter().println("Hello World!");
}

但需要說明,既然spring已經(jīng)提供底層實(shí)現(xiàn)的抽象和附件功能,當(dāng)然不建議直接操作response。

3. 擴(kuò)展(跨平臺路徑問題)

  • File.separator:系統(tǒng)相關(guān)的默認(rèn)名稱分隔符,為方便起見表示為字符串。該字符串只包含一個字符,即separatorChar
  • separatorChar:系統(tǒng)依賴的默認(rèn)名稱分隔符。這個字段被初始化為包含系統(tǒng)屬性file.separator值的第一個字符。在UNIX系統(tǒng)上,這個字段的值是’\‘;在Microsoft Windows系統(tǒng)上它是’\\’

注意:如果要考慮跨平臺,則最好使用File.separator標(biāo)識路徑分隔符,不要直接用字符串’\\'來表示

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java之NoClassDefFoundError的原因及分析

    Java之NoClassDefFoundError的原因及分析

    在Java開發(fā)中,經(jīng)常會遇到ClassNotFoundException和NoClassDefFoundError異常,ClassNotFoundException發(fā)生在編譯時JVM無法找到類,而NoClassDefFoundError則發(fā)生在運(yùn)行時JVM無法加載類,這兩個異常雖然原因相似,但有本質(zhì)區(qū)別
    2024-09-09
  • SpringBoot中的Thymeleaf模板

    SpringBoot中的Thymeleaf模板

    Thymeleaf 的出現(xiàn)是為了取代 JSP,雖然 JSP 存在了很長時間,并在 Java Web 開發(fā)中無處不在,但是它也存在一些缺陷。在這篇文中給大家介紹了這些缺陷所存在問題,對spring boot thymeleaf 模板相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2018-10-10
  • SpringBoot之瘦身部署的詳細(xì)步驟

    SpringBoot之瘦身部署的詳細(xì)步驟

    本篇文章主要介紹了SpringBoot之瘦身部署的詳細(xì)步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Java按時間梯度實(shí)現(xiàn)異步回調(diào)接口的方法

    Java按時間梯度實(shí)現(xiàn)異步回調(diào)接口的方法

    這篇文章主要介紹了Java按時間梯度實(shí)現(xiàn)異步回調(diào)接口,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • Java高性能緩存框架之Caffeine詳解

    Java高性能緩存框架之Caffeine詳解

    這篇文章主要介紹了Java高性能緩存框架之Caffeine詳解,Caffeine是一個基于Java8的高性能緩存框架,號稱趨于完美,Caffeine受啟發(fā)于Guava?Cache的API,使用API和Guava是一致的,需要的朋友可以參考下
    2023-12-12
  • Java字符串駝峰與下?lián)Q線格式轉(zhuǎn)換如何實(shí)現(xiàn)

    Java字符串駝峰與下?lián)Q線格式轉(zhuǎn)換如何實(shí)現(xiàn)

    這篇文章主要介紹了Java字符串駝峰與下?lián)Q線格式轉(zhuǎn)換如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 解決微服務(wù)feign調(diào)用添加token的問題

    解決微服務(wù)feign調(diào)用添加token的問題

    這篇文章主要介紹了解決微服務(wù)feign調(diào)用添加token的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 新手了解java 異常處理基礎(chǔ)知識

    新手了解java 異常處理基礎(chǔ)知識

    Java中異常提供了一種識別及響應(yīng)錯誤情況的一致性機(jī)制,有效地異常處理能使程序更加健壯、易于調(diào)試。那么這篇文章總結(jié)了Java有效處理異常的三個原則,有需要的朋友們可以參考借鑒
    2021-07-07
  • ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

    這篇文章主要介紹了ActiveMQ消息簽收機(jī)制代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • MyBatis多對多一對多關(guān)系查詢嵌套處理

    MyBatis多對多一對多關(guān)系查詢嵌套處理

    這篇文章主要為大家介紹了MyBatis多對多一對多關(guān)系查詢嵌套處理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10

最新評論