最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot ResponseEntity標(biāo)識(shí)Http響應(yīng)方式

 更新時(shí)間:2024年07月10日 16:59:23   作者:fengyehongWorld  
這篇文章主要介紹了SpringBoot ResponseEntity標(biāo)識(shí)Http響應(yīng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一. 說(shuō)明

  • ResponseEntity用來(lái)標(biāo)識(shí)整個(gè)Http響應(yīng),可以標(biāo)識(shí)狀態(tài)碼,Head頭部信息,以及響應(yīng)體。
  • ResponseEntity的優(yōu)先級(jí)高于@ResponseBody。

在返回值不是ResponseEntity的情況下才去檢查有沒(méi)有@ResponseBody注解。

如果響應(yīng)類(lèi)型是ResponseEntity可以不寫(xiě)@ResponseBody注解,便可返回JSON數(shù)據(jù)或其他類(lèi)型的數(shù)據(jù),如果同時(shí)使用ResponseEntity和@ResponseBody注解也不會(huì)報(bào)錯(cuò)。

  • ResponseEntity是在 org.springframework.http.HttpEntity 的基礎(chǔ)上添加了http status code(http狀態(tài)碼)。作用是和@ResponseStatus@ResponseBody結(jié)合起來(lái)的功能一樣的。
  • @ResponseBody可以直接返回JSON結(jié)果, @ResponseEntity不僅可以返回JSON結(jié)果,還可以返回自定義的HttpHeaders和HttpStatus。

二. ResponseEntity.ok().headers(響應(yīng)頭).body(響應(yīng)體)

可用于文件下載

與直接向HttpServletResponse中寫(xiě)入OutputStream和header的效果相同

HttpServletResponse是servlet式的寫(xiě)法,而ResponseEntity是Springt式的寫(xiě)法

  • new ResponseEntity<>(響應(yīng)體, 響應(yīng)頭, 狀態(tài)碼) 是非簡(jiǎn)寫(xiě)方式
  • ResponseEntity.ok().headers(響應(yīng)頭).body(響應(yīng)體) 是簡(jiǎn)寫(xiě)方式
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/測(cè)試文件.text";
    ClassPathResource readFile = new ClassPathResource(filePath);

    // 設(shè)置響應(yīng)頭,把文件名稱(chēng)放入響應(yīng)頭中,確保文件可下載
    HttpHeaders headers = new HttpHeaders();
    headers.set("Content-Disposition", "attachment;filename=" + URLEncoder.encode(readFile.getFilename(), "UTF-8"));
    // 設(shè)置內(nèi)容類(lèi)型為「application/octet-stream」二進(jìn)制流
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

    // 獲取File對(duì)象
    File file = readFile.getFile();
    Path path = Paths.get(file.toURI());
    // 獲取File對(duì)象的字節(jié)碼文件
    byte[] bytes = Files.readAllBytes(path);

    /*
     * 表示返回一個(gè)字節(jié)碼類(lèi)型的響應(yīng)
     * 同時(shí)設(shè)置了響應(yīng)頭和狀態(tài)碼
     * */
    if (ObjectUtils.isEmpty(readFile.getFilename())) {
        // ??????簡(jiǎn)寫(xiě)形式
        return ResponseEntity.ok().headers(headers).body(bytes);
    }

    // ??????非簡(jiǎn)寫(xiě)形式
    return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}

三. ResponseEntity.ok(響應(yīng)內(nèi)容)

請(qǐng)求成功,直接把后臺(tái)的數(shù)據(jù)響應(yīng)給前臺(tái)

@GetMapping("/testResponseEntity2")
public ResponseEntity<List<String>> testResponseEntity2() {

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

與下面這種寫(xiě)法 功能相同

@GetMapping("/testResponseEntity2")
@ResponseBody
public List<String> testResponseEntity2() {

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

四. ResponseEntity<Void>

  • HttpStatus.NO_CONTENT狀態(tài)碼為204,表示服務(wù)器成功的處理了請(qǐng)求,但是沒(méi)有返回任何內(nèi)容

多用于 更新刪除 的時(shí)候,響應(yīng)給前臺(tái)一個(gè)狀態(tài)碼,表示操作成功。

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

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

    // ?http狀態(tài)碼 204 (無(wú)內(nèi)容) 服務(wù)器成功處理了請(qǐng)求,但沒(méi)有返回任何內(nèi)容。
    if (ObjectUtils.isEmpty(param)) {
    	// ?簡(jiǎn)寫(xiě)方式
        return ResponseEntity.noContent().build();
    }
	
	// ?非簡(jiǎn)寫(xiě)方式
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

五. ResponseEntity.status(狀態(tài)碼)

用于向前臺(tái)返回指定的狀態(tài)碼,還可以返回Header和響應(yīng)內(nèi)容

  • HttpStatus.CREATED201狀態(tài)碼表示請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源。
@GetMapping("/testResponseEntity4")
public ResponseEntity<Void> testResponseEntity4() {
	
	// 向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)
	// ......
	
    // ?http狀態(tài)碼 201 (已創(chuàng)建) 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源。
    return ResponseEntity.status(HttpStatus.CREATED).build();
}

@GetMapping("/testResponseEntity5")
public ResponseEntity<String> testResponseEntity5(String param) {
	
	// 如果參數(shù)不存在就返回默認(rèn)的圖片url,并返回狀態(tài)碼201
    if (!ObjectUtils.isEmpty(param)) {
        return new ResponseEntity<>("默認(rèn)的圖片URL", HttpStatus.CREATED);
    }
	
	// 向數(shù)據(jù)庫(kù)中插入圖片,并返回能訪(fǎng)問(wèn)圖片地址的url
	// ......
	// ?用于插入數(shù)據(jù)成功之后返回?cái)?shù)據(jù)給前臺(tái)

    // ?201 狀態(tài)碼,并返回圖片的url
    return ResponseEntity.status(HttpStatus.CREATED).body("圖片的url");
}

六. ResponseEntity.status(狀態(tài)碼).body(響應(yīng)體)

  • HttpStatus.BAD_REQUEST表示狀態(tài)碼400,異常的請(qǐng)求。
@GetMapping("/testResponseEntity6")
public ResponseEntity<Map<String, Object>> testResponseEntity6(String param) {
	
	// 用來(lái)存放校驗(yàn)信息的Map
    Map<String, Object> map = new HashMap<>();
	
	// 進(jìn)行參數(shù)校驗(yàn)
    if (param == null) {
    	// 參數(shù)為null,直接返回錯(cuò)誤碼400
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
    } else if ("".equals(param.trim())){
    	// 參數(shù)為空字符串,返回錯(cuò)誤碼400的同時(shí),還返回錯(cuò)誤信息
        map.put("errorMsg","參數(shù)為空");
        return ResponseEntity.badRequest().body(map);
    }

    // 200 狀態(tài)碼,并指定請(qǐng)求成功的響應(yīng)體
    map.put("successMsg", "參數(shù)通過(guò)校驗(yàn)");
	
    return ResponseEntity.status(HttpStatus.OK).body(map);
    
    // 這種寫(xiě)法更加簡(jiǎn)單,本質(zhì)上和上面是一種寫(xiě)法
    // return ResponseEntity.ok(map);
}

七. 前臺(tái)ajax

$.ajax({
    url: `請(qǐng)求URL`,
    type: '請(qǐng)求方式',
    // data: JSON.stringify(param),
    // 向服務(wù)器發(fā)送的數(shù)據(jù)類(lèi)型
    // contentType: 'application/json;charset=utf-8',
    // dataType: 'json',
    success: function (data, status, xhr) {

        // 請(qǐng)求成功的響應(yīng)體
        console.log(data);

        // 請(qǐng)求成功的狀態(tài)文字描述(success,nocontent等)
        console.log(status);

        // 請(qǐng)求成功的狀態(tài)碼(200,201,204等)
        const {
            status: stateCode
        } = xhr;
        console.log(stateCode);
    },
    error(xhr, status, error) {

        const {
            // 請(qǐng)求異常時(shí)的json格式響應(yīng)體
            responseJSON,
            // 請(qǐng)求異常時(shí)的文本響應(yīng)內(nèi)容
            responseText,
            // 請(qǐng)求異常時(shí)的狀態(tài)碼
            status: stateCode
        } = xhr;
        console.log(responseJSON);
        console.log(responseText);
        console.log(stateCode);

        // 請(qǐng)求成功的狀態(tài)文字描述(error等)
        console.log(status);
    }
});

總結(jié)

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

相關(guān)文章

  • Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)

    Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì)

    本文主要介紹了Java中計(jì)算集合中元素的出現(xiàn)次數(shù)統(tǒng)計(jì),使用Collections類(lèi)配合HashMap來(lái)統(tǒng)計(jì)和java lamb 計(jì)算這兩種方式,具有一定的參考價(jià)值,感興趣可以了解一下
    2024-02-02
  • JavaWeb?中的?Filter組件詳解

    JavaWeb?中的?Filter組件詳解

    本文詳細(xì)介紹了JavaWeb中的Filter組件,包括其基本概念、工作原理、核心接口和類(lèi)、配置方式以及常見(jiàn)應(yīng)用示例,Filter可以實(shí)現(xiàn)請(qǐng)求預(yù)處理、響應(yīng)后處理、鏈?zhǔn)教幚淼裙δ?通過(guò)配置文件或注解進(jìn)行設(shè)置,適用于字符編碼、身份認(rèn)證、日志記錄等多種場(chǎng)景,感興趣的朋友一起學(xué)習(xí)吧
    2025-11-11
  • MySQL和Java通用加密解密方式小結(jié)

    MySQL和Java通用加密解密方式小結(jié)

    這篇文章主要介紹了MySQL和Java通用加密解密方式,加密方式使用AES加密,在轉(zhuǎn)成Base64,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-12-12
  • Java?Mybatis框架由淺入深全解析上篇

    Java?Mybatis框架由淺入深全解析上篇

    MyBatis是一個(gè)優(yōu)秀的持久層框架,它對(duì)jdbc的操作數(shù)據(jù)庫(kù)的過(guò)程進(jìn)行封裝,使開(kāi)發(fā)者只需要關(guān)注SQL本身,而不需要花費(fèi)精力去處理例如注冊(cè)驅(qū)動(dòng)、創(chuàng)建connection、創(chuàng)建statement、手動(dòng)設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過(guò)程代碼本文將為大家初步的介紹一下MyBatis的使用
    2022-07-07
  • 使用Java生成JWT令牌的示例代碼

    使用Java生成JWT令牌的示例代碼

    json-web-token簡(jiǎn)稱(chēng)java web令牌,也稱(chēng)作JWT,是一種可以實(shí)現(xiàn)跨域身份驗(yàn)證身份的方案,jwt不加密傳輸數(shù)據(jù),但能夠通過(guò)數(shù)據(jù)前面驗(yàn)證數(shù)據(jù)的未被篡改,本文給大家介紹了如何使用Java生成JWT令牌,需要的朋友可以參考下
    2024-04-04
  • Java使用dom4j解析XML

    Java使用dom4j解析XML

    dom4j是一個(gè)開(kāi)源的、基于Java的XML解析庫(kù),而在Java中使用dom4j庫(kù)解析XML是一種常見(jiàn)的方法,下面就跟隨小編一起來(lái)學(xué)習(xí)一下Java如何使用dom4j解析XML吧
    2024-12-12
  • IDEA使用Tomcat運(yùn)行web項(xiàng)目教程分享

    IDEA使用Tomcat運(yùn)行web項(xiàng)目教程分享

    在非Spring Boot項(xiàng)目中運(yùn)行Nacos示例,需要手動(dòng)配置Tomcat容器,本文介紹了如何在IDEA中配置Tomcat,并詳細(xì)解決了配置過(guò)程中可能遇到的異常情況,步驟包括修改IDEA項(xiàng)目結(jié)構(gòu)、添加Web模塊、配置Artifacts和Tomcat Server
    2024-10-10
  • springMVC攔截器HandlerInterceptor用法代碼示例

    springMVC攔截器HandlerInterceptor用法代碼示例

    這篇文章主要介紹了springMVC攔截器HandlerInterceptor用法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • java中的Io(input與output)操作總結(jié)(一)

    java中的Io(input與output)操作總結(jié)(一)

    所謂IO,也就是Input與Output的縮寫(xiě)。在java中,IO涉及的范圍比較大,這里主要討論針對(duì)文件內(nèi)容的讀寫(xiě),感興趣的朋友可以了解下
    2013-01-01
  • Mybatis-plus在新增或修改時(shí)如何自動(dòng)插入或修改某個(gè)字段值

    Mybatis-plus在新增或修改時(shí)如何自動(dòng)插入或修改某個(gè)字段值

    文章講述了MyBatis-Plus中MetaObjectHandler接口的使用方法,通過(guò)在實(shí)體類(lèi)中添加@TableField注解并實(shí)現(xiàn)MetaObjectHandler接口的insertFill和updateFill方法,為新增和更新操作時(shí)自動(dòng)填充公共字段如createTime、updateTime等的默認(rèn)值
    2026-04-04

最新評(píng)論

惠安县| 明水县| 杭锦后旗| 深州市| 凤城市| 木兰县| 常州市| 东方市| 乌审旗| 东乌珠穆沁旗| 银川市| 津市市| 澄江县| 龙州县| 息烽县| 秀山| 卓尼县| 翼城县| 隆德县| 灵川县| 铜梁县| 于都县| 四子王旗| 琼中| 花垣县| 扎赉特旗| 昌都县| 盐城市| 合阳县| 万宁市| 定州市| 德阳市| 邢台县| 饶平县| 肥城市| 扶余县| 双牌县| 泰兴市| 忻城县| 托克逊县| 金寨县|