學透Spring Boot — 018. 優雅支持多種響應格式

這是我的專欄《學透Spring Boot》的第18篇文章,想要更系統的學習Spring Boot,請訪問我的專欄:學透 Spring Boot_postnull咖啡的博客-CSDN博客。

目錄

返回不同格式的響應

Spring Boot的內容協商

控制器不用任何修改

啟動內容協商配置

訪問應用

獲取XML格式的響應

添加XML的支持

設置變量名

配置其它的格式

總結


Spring MVC中會根據@GetMapping或者@RequestMapping中的路徑,匹配對應的HTTP請求到指定的方法去,這個我們不再累述。

今天我們玩點更特別的。

返回不同格式的響應

有時候,我們希望我們的響應,既可以返回json格式,也可以返回xml格式。

返回什么格式,由我們的參數來決定。

最傻的辦法,是在Controller中,解析format參數,然后用XML或者Json解析器把對象轉換成json或者XML格式。

這樣當然可以,但是有點不夠優雅。

Spring Boot的內容協商

好在,Spring Boot已經幫我實現了這樣的特性,支持不同格式的響應。

控制器不用任何修改

控制器不用做任何修改,甚至連format參數都不用加。

啟動內容協商配置

application.properties

spring.mvc.contentnegotiation.favor-parameter=true

訪問應用

然后我們可以帶參數獲取不同的響應。

http://localhost:8080/buyBike?format=json

返回了json響應

不帶format參數,返回的也是json。這是默認格式。

獲取XML格式的響應

然后我們再獲取xml響應:http://localhost:8080/buyBike?format=xml

非常可惜,情況有點異常。報錯了。

查看日志,發現支持的格式中居然沒有application/xml.

這是怎么回事呢?

我們debug看看,啟動時看看WebMvcConfigurer (Spring MVC配置器)加載了哪些http消息轉換器。

要深入了解HTTP消息轉換器,請看我上一篇的文章學透Spring Boot — 017. 魔術師—Http消息轉換器-CSDN博客

可以看到,SpringBoot只配置了json的轉換器。

我們再看看jackson的自動配置類

可以看到,要配置Jackson XML,就classpath下必須有XmlMapper類。

很可惜Spring Boot默認沒有引入這個類。

添加XML的支持

為了支持XML的響應,我們需要引入XML相關的依賴。

這時候有了XmlMapper類,我們的Jackson也會去自動配置XML轉換器了。

我們重啟服務,debug,再看看加載的消息轉換器列表。

下圖可以看出,Jackson XML的消息轉換器已經自動配置并加載了。

再次訪問,成功返回xml的響應!!!

設置變量名

其實我們還可以做得在多一點。比如我不喜歡format這個變量,我想改成good

spring.mvc.contentnegotiation.parameter-name=good

完全OK

配置其它的格式

如果我還想配置其它的格式,也是可以的。比如我們前面文章自主研發的格式“hehe/nba”

spring.mvc.contentnegotiation.media-types.hehe-nbc=hehe/nba

訪問有問題可能是因為你的格式不在支持的列表中

RequestResponseBodyMethodProcessor : Using 'hehe/nba;charset=UTF-8', given [hehe/nba] and supported [application/json, application/*+json, application/xml;charset=UTF-8, text/xml;charset=UTF-8, application/*+xml;charset=UTF-8, hehe/nba;charset=UTF-8, hehe/nba]

而且我們開發的hehe/nba格式,暫時只處理了Car類。

總結

本文,我們自己通過內容協商,實現了返回多種格式響應的需求,而且不用改動任何業務代碼,只需做少量配置即可。另外,我們也通過引入XML的依賴,實現了Spring Boot對Jackson XML的自動配置。

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

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

相關文章

ngx_os_init

定義在 src\os\unix\ngx_posix_init.c ngx_int_t ngx_os_init(ngx_log_t *log) {ngx_time_t *tp;ngx_uint_t n; #if (NGX_HAVE_LEVEL1_DCACHE_LINESIZE)long size; #endif#if (NGX_HAVE_OS_SPECIFIC_INIT)if (ngx_os_specific_init(log) ! NGX_OK) {return NGX_ERR…

深信服護網藍初面試題

《網安面試指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇網安資料庫https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

游戲引擎學習第206天

回顧并為當天的工作定下目標 接著回顧了前一天的進展。之前我們做了一些調試功能,并且已經完成了一些基礎的工作,但是還有一些功能需要繼續完善。其中一個目標是能夠展示實體數據,以便在開發游戲邏輯系統時,可以清晰地查看和檢查…

HTML 表單:構建交互式網頁的關鍵元素

HTML 表單:構建交互式網頁的關鍵元素 引言 HTML表單是構建交互式網頁的核心組件之一,它允許用戶與網站進行交互,提交信息、填寫問卷或進行其他操作。本文將深入探討HTML表單的基礎知識、常用元素、表單驗證以及如何優化表單設計,以提高用戶體驗和網站的可訪問性。 HTML表…

Qt音頻采集:QAudioInput詳解與示例

1. 簡介 QAudioInput是Qt Multimedia模塊中用于音頻采集的核心類,能夠從麥克風等輸入設備實時獲取原始音頻數據(PCM格式)。本文將通過原理講解和代碼示例,幫助開發者快速掌握音頻采集的核心技術。 2. 核心功能 支持多種音頻格式&…

下載安裝Node.js及其他環境

提示:從Node版本降級到Vue項目運行 文章目錄 下載Node.js環境配置配置環境變量 安裝 cnpm(我需要安裝)安裝腳手架安裝依賴安裝淘寶鏡像(注意會更新)cnpm vs npm 與新舊版本核心差異包管理器不同功能差異如何選擇&#…

【后端】ORM / ODM

長期不定期更新,建議關注收藏點贊。 概述 ORM(Object-Relational Mapping,對象關系映射):面向關系型數據庫,ORM將對象映射到數據庫的表和行(例如MySQL、PostgreSQL)。ODM&#xff0…

無限滾動(Infinite Scroll)頁面谷歌不收錄!必須改回分頁嗎?

近三年,全球超過58%的網站采用無限滾動設計(數據來源:PageTraffic 2023) 谷歌官方數據顯示,動態加載內容的索引失敗率高達73%(Google Webmaster Report 2022),而采用純無限滾動的頁…

手寫JSX實現虛擬DOM

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

網絡性能優化參數關系解讀 | TCP Nagle / TCP_NODELAY / TCP_QUICKACK / TCP_CORK

注:本文為 “網路性能優化” 相關文章合輯。 未整理去重。 如有內容異常,請看原文。 TCP_NODELAY 詳解 lenky0401 發表于 2012-08-25 16:40 在網絡擁塞控制領域,Nagle 算法(Nagle algorithm)是一個非常著名的算法&…

玄機-應急響應-webshell查殺

題目要求: 要求獲取四個flag webshell查殺: 常見的webshell: PHP: eval(), system(), exec(), shell_exec(), passthru(), assert(), base64_decode() ASP: Execute(), Eval(), CreateObject() JSP: Runtime.getRuntime().exec() websh…

docker存儲卷及dockers容器源碼部署httpd

1. COW機制 Docker鏡像由多個只讀層疊加而成,啟動容器時,Docker會加載只讀鏡像層并在鏡像棧頂部添加一個讀寫層。 如果運行中的容器修改了現有的一個已經存在的文件,那么該文件將會從讀寫層下面的只讀層復制到讀寫層,該文件的只讀版本依然存在,只是已經被讀寫層中該文件…

PyTorch中卷積層torch.nn.Conv2d

在 PyTorch 中,卷積層主要由 torch.nn.Conv1d、torch.nn.Conv2d 和 torch.nn.Conv3d 實現,分別對應一維、二維和三維卷積操作。以下是詳細說明: 1. 二維卷積 (Conv2d) - 最常用 import torch.nn as nn# 基本參數 conv nn.Conv2d(in_channe…

從 ZStack 獲取物理機與云主機信息并導出 Excel 文件

文章目錄 從 ZStack 獲取物理機與云主機信息并導出 Excel 文件環境zstack 官網客戶端封裝講解 獲取物理機信息講解 獲取云主機信息并關聯物理機講解 導出數據到 Excel 文件講解 運行主程序講解 總結最終文檔效果完整代碼 從 ZStack 獲取物理機與云主機信息并導出 Excel 文件 在…

5.好事多磨 -- TCP網絡連接Ⅱ

前言 第4章節通過回聲服務示例講解了TCP服務器端/客戶端的實現方法。但這僅是從編程角度的學習,我們尚未詳細討論TCP的工作原理。因此,將詳細講解TCP中必要的理論知識,還將給出第4章節客戶端問題的解決方案。 一、回聲客戶端完美實現 第4章…

sql server數據庫可疑修復

sql server數據庫可疑修復 從上圖可以看到數據庫nchrdb顯示可疑,導致原因為NC系統在增加公共薪資項目的時候,擴展字段報錯了,第一次遇到這種情況,折騰了很久終于解決,記下解決方案: 1,將SQL數據…

Flutter之頁面布局二

目錄: 1、列表布局1.1、基礎列表1.2、水平滑動的列表1.3、網格列表1.3、不同列表項的列表1.4、包含間隔的列表1.6、長列表 2、滾動2.1、浮動的頂欄2.2、平衡錯位滾動 1、列表布局 1.1、基礎列表 import package:flutter/material.dart;void main() > runApp(con…

ARM------硬件程序開發

硬件程序開發流程 相關硬件的工作原理 理解硬件的工作原理,明確硬件的功能和用途。 硬件連接 將硬件設備正確連接到開發板上。 編寫程序 根據硬件功能編寫相應的程序代碼。 調試驗證 通過調試工具驗證程序的正確性,確保硬件功能正常。 控制LED的…

《QT從基礎到進階·七十四》Qt+C++開發一個python編譯器,能夠編寫,運行python程序改進版

1、概述 源碼放在文章末尾 根據上一篇文章回顧下利用QtC實現了一個簡易的python編譯器,類似pycharm或vsCode這樣的編譯器,該python編譯器目前實現了如下功能: (1)支持編寫python程序 (2)編寫代…

Winform MQTT客戶端連接方式

項目中使用到Winform的數據轉發服務,所以記錄下使用到的方法。 一.創建單例模板 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApp.Scripts {public class SingleTon&…