【spring】@ResponseBody注解學習

@ResponseBody介紹

@ResponseBody 是一個Spring框架中的注解,主要用于Web開發,特別是在Spring MVC框架中。它的核心作用是改變Spring MVC處理HTTP請求響應的行為,使得從控制器方法返回的數據直接寫入HTTP響應體(Response Body)中,而不是像默認行為那樣去渲染一個視圖模板(如JSP、Thymeleaf等)。這在構建RESTful API或者需要直接向客戶端返回JSON、XML等數據格式時非常有用。

@ResponseBody源碼

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ResponseBody {}
源代碼截圖

@ResponseBody屬性介紹

沒有屬性,哈哈哈。

@ResponseBody注解使用場景

  1. 返回JSON或XML響應:當你需要從控制器方法返回JSON或XML格式的數據,而不是傳統的HTML視圖時,可以使用 @ResponseBody 來指示Spring MVC將返回值自動轉換為JSON或XML格式。

  2. RESTful Web服務:在構建RESTful Web服務時,通常需要返回JSON或XML格式的響應。使用 @ResponseBody 可以非常方便地實現這一點,而不需要編寫額外的代碼來進行數據轉換。

  3. 簡單文本響應:除了JSON和XML,@ResponseBody 還可以用于返回純文本響應,例如返回一個簡單的字符串或數字。

  4. 避免視圖解析:在某些情況下,你可能不希望Spring MVC進行視圖解析,而是直接返回方法的返回值。使用 @ResponseBody 可以避免Spring MVC查找和解析視圖。

  5. 自定義響應:如果你需要自定義響應頭或者狀態碼,并且希望響應體包含特定的數據,@ResponseBody 可以與 @RequestMapping 或其他HTTP特定注解結合使用來實現這一需求。

  6. 異步請求處理:在處理異步請求時,可以使用 @ResponseBody 來返回異步處理的結果,例如使用 DeferredResultCallable 返回一個異步的結果。

  7. 減少模板的使用:在某些情況下,可能不需要使用Spring的視圖模板(如Thymeleaf、JSP等),而是直接返回業務數據。@ResponseBody 可以幫助減少對模板引擎的依賴。

  8. @RestController 結合使用@RestController@Controller@ResponseBody 的快捷方式,用于指示該控制器類中的所有方法都返回響應體而不是視圖。這在編寫純RESTful控制器時非常有用。

  9. API開發:在開發API時,經常需要返回結構化數據,@ResponseBody 使得返回JSON或XML格式的數據變得簡單直接。

  10. 前端與后端分離:在現代Web開發中,前端和后端分離是一種常見的架構模式。@ResponseBody 使得后端可以專注于提供數據,而前端則可以自由地選擇如何展示這些數據。

@ResponseBody測試示例代碼

示例代碼 一
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.ResponseBody;@RestController
public class MyController {@GetMapping("/hello")@ResponseBodypublic String sayHello() {return "Hello, World!";}@GetMapping("/user")@ResponseBodypublic User getUser() {User user = new User();user.setName("程序員食堂大叔");user.setAge(25);return user;}
}
示例代碼二(@ResponseBody注解返回XML)

配置中包含了處理XML的轉換器

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {converters.add(new Jaxb2RootElementHttpMessageConverter());}
}

創建支持XML序列化的Java類使用JAXB注解

import javax.xml.bind.annotation.XmlRootElement;@Data
@XmlRootElement
public class DemoData {private String name;private String description;}

創建TestController

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@RestController
public class TestController {@GetMapping(value = "/demo/xml/Data", produces = "application/xml")@ResponseBodypublic MyData getDemoXmlData() {DemoData data = new DemoData ();data.setName("demo");data.setDescription("This is an example data.");return data;}
}



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15261.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15261.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15261.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python面試寶典:Python中與網絡協議基礎和socket編程相關的知識和面試筆試題(1000加面試筆試題助你輕松捕獲大廠Offer)

Python面試寶典:1000加python面試題助你輕松捕獲大廠Offer【第二部分:Python高級特性:第十四章:網絡編程:第一節:網絡協議基礎和socket編程】 第十四章:并發編程第一節:網絡協議基礎和socket編程網絡協議基礎Socket編程創建SocketTCP服務器TCP客戶端數據傳輸關閉Socket…

Python高級進階--slice切片

slice切片?? 在 Python 中&#xff0c;切片操作是一種常見且方便的方式&#xff0c;用于從字符串、列表或元組中獲取部分元素。這種操作通過指定起始索引、結束索引和步長來實現。下面我們來看一些關于切片的簡單介紹以及一些常見用法。 1. 切片簡介 取一個str、list、tup…

【Unity2D:Animator】為角色添加動畫效果

一、添加Animator組件并創建Animator Controller文件 1. 添加Animator組件&#xff1a; 2. 在Assets-Art文件夾中新建一個名為Animations的文件夾&#xff0c;用來存儲所有動畫資源 3. 在Animations文件夾中新建一個名為Player的文件夾&#xff0c;再創建一個名為Animators的文…

LeetCode //C - 119. Pascal‘s Triangle II

119. Pascal’s Triangle II Given an integer rowIndex, return the rowIndexth (0-indexed) row of the Pascal’s triangle. In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown: Example 1: Input: rowIndex 3 Output: …

vue項目移動端商場

一、項目前端頁面展示 二、項目整體目錄結構 三、項目流程 1. vue快速創建基礎項目 創建項目 vue create hk-shop 1 選擇需要的配置 創建基礎文件夾目錄 src文件夾下文件夾目錄&#xff1a; ① views 文件夾存放界面 ② components 文件夾存放界面中局部組件 ③ config 文件夾存…

【排序算法】——歸并排序(遞歸與非遞歸)含動圖

制作不易&#xff0c;三連支持一下吧&#xff01;&#xff01;&#xff01; 文章目錄 前言一.歸并排序遞歸方法實現二.歸并排序非遞歸方法實現 前言 這篇博客我們將介紹歸并排序的原理和實現過程。 一、歸并排序遞歸方法實現 基本思想&#xff1a; 歸并排序&#xff08;MERGE-…

JS(ES_6)_2

1.創建對象的6種方式&#xff1a; 1. obnew Object() ob.nameah ob.age18 2. ob{name:ah,gae:18} 3.工廠模式&#xff1a; 設計一個函數&#xff0c;專門生產Person類型的對象 <script>function createPerson(name,age,family) {var o new Object();o.name name;o.…

軟件設計師備考 | 案例專題之數據流圖 概念與例題

案例分析專題大綱&#xff1a; 數據流圖基本概念 基本圖形元素&#xff1a;外部實體、加工、數據存儲、數據流 數據流&#xff1a;由一組固定成分的數據組成&#xff0c;表示數據的流向。在DFD中&#xff0c;數據流的流向必須經過加工。加工&#xff1a;描述了輸入數據流到輸出…

啊哈!算法-第2章-棧、隊列、鏈表

啊哈!算法-第2章-棧、隊列、鏈表 第1節 解密qq號——隊列第2節 解密回文——棧第3節 紙牌游戲——小貓釣魚第4節 鏈表第5節 模擬鏈表 第1節 解密qq號——隊列 新學期開始了&#xff0c;小哈是小哼的新同桌(小哈是個大帥哥哦~)&#xff0c;小哼向小哈詢問 QQ 號&#xff0c; 小…

算法提高之線段樹

算法提高之線段樹 存儲方式 線段樹除了最后一層葉子節點以外是一個滿二叉樹類似堆的形式 因此可以用堆來存儲線段樹同時注意到 數組是可以模擬堆的 因此我們可以用一位數組來存儲線段樹 節點編號為u&#xff0c;對應左子樹編號為2 * u&#xff0c;右子樹編號為2 * u 1裝逼一…

C++ 學習 指針上

&#x1f64b; 繼續C Primer 第五版的學習 注 后面還會有關于指針進一步的學習 本篇為基礎篇 &#x1f33f;可以先看看這兩篇 或許可以進一步加深一下對指針的理解 指針和數組 指針簡介 &#x1f308; 上一次講了 C中的引用&#xff0c;現在總結一下指針和引用的主要區別。 …

uniapp微信小程序解決open-type獲取用戶頭像,返回臨時路徑問題!

解決 open-type 為 chooseAvatar&#xff0c;返回臨時路徑問題 文章目錄 解決 open-type 為 chooseAvatar&#xff0c;返回臨時路徑問題效果圖Demo獲取頭像回調數據結構效果圖解決方式上傳到服務器轉base64 基于微信小程序獲取頭像昵稱規則調整后&#xff0c;當小程序需要讓用戶…

深入了解FreeRTOS:實時操作系統的核心概念和應用

前言&#xff1a; 在當今數字化世界中&#xff0c;嵌入式系統扮演著至關重要的角色&#xff0c;從工業自動化到智能設備&#xff0c;無所不在。而實時操作系統&#xff08;RTOS&#xff09;則是這些系統的核心引擎&#xff0c;它們負責管理任務、資源和時間&#xff0c;確保系統…

RmlUi 初試,hello world

前言 最近在研究GUI的各個方面&#xff0c;最后被導向了web render&#xff0c;真的是一言難盡。 這里就其中一個比較有意思的項目 RmlUi 淺試一下&#xff0c;沒想要還挺麻煩&#xff01;這里留下note以供后人參考。 環境搭建 Windows VS2022 pre-binary library 需要指…

高通Android 12/13 設置和獲取ADB狀態

/*** 設置ADB狀態** param isEnable*/public void setADB(boolean isEnable) {Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED, isEnable ? 1 : 0);}/*** 獲取ADB狀態** return*/public boolean getADB() {return Settings.Global.getIn…

虛擬化技術[3]之網絡虛擬化

網絡虛擬化 網絡虛擬化簡介核心層網絡虛擬化接入層網絡虛擬化虛擬機網絡虛擬化案例: VMware網絡虛擬化技術虛擬網絡接口卡虛擬交換機vSwitch分布式交換機端口組VLAN 網絡虛擬化簡介 傳統的數據中心&#xff1a;服務器之間操作系統和上層軟件異構、接口與數據格式不統一&#x…

鏈表相交-力扣

在做這道題時&#xff0c;首先想到的解法是遍歷第一個鏈表&#xff0c;將其全部添加到哈希表中&#xff0c;然后遍歷第二個鏈表&#xff0c;如果能夠再哈希表中查到元素&#xff0c;則返回這個元素&#xff0c;否則返回NULL。 但在實際寫代碼時&#xff0c;第一次寫默認為鏈表相…

Redis實現MQ

MQ的提出 上游發出請求后阻塞等待下游給到反饋&#xff0c;否則整個流程將一直阻塞。 提出mq之后&#xff1a;即有producer mq consumer 三者 MQ的特點 異步解耦 在有了 mq 后&#xff0c;producer 不需要過分關心 consumer 的身份信息&#xff0c;只需要把消息按照指定的協議…

Python 潮流周刊#52:Python 處理 Excel 的資源

本周刊由 Python貓 出品&#xff0c;精心篩選國內外的 250 信息源&#xff0c;為你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。愿景&#xff1a;幫助所有讀者精進 Python 技術&#xff0c;并增長職業和副業的收入。 本期周刊分享了 12 篇文…

基于hive的酒店價格數據可視化分析系統設計和實現

摘要 本文基于Django框架和Hive技術&#xff0c;設計和實現了一種酒店價格數據可視化分析系 統&#xff0c;旨在為酒店管理者提供直觀、清晰的數據洞察和決策支持。在研究中&#xff0c;首先深入分 析了酒店價格數據可視化分析系統的背景和意義&#xff0c;認識到對于酒店行…