可讀性:XML" />

日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

接口響應以XML數據格式輸出,這些方法你都知道嗎?

來源: 責編: 時間:2024-01-26 09:02:19 212觀看
導讀環境:SpringBoot3.1.7 + JDK171. 簡介XML與JSON都是用于數據交換的格式,但它們之間存在一些關鍵差異,決定了何時應該使用XML而不是JSON,以及何時應該使用JSON而不是XML?一般會從如下幾方面考慮使用哪種數據格式:
可讀性:XML

環境:SpringBoot3.1.7 + JDK17gU528資訊網——每日最新資訊28at.com

1. 簡介

XML與JSON都是用于數據交換的格式,但它們之間存在一些關鍵差異,決定了何時應該使用XML而不是JSON,以及何時應該使用JSON而不是XML?一般會從如下幾方面考慮使用哪種數據格式:
gU528資訊網——每日最新資訊28at.com

可讀性:XML 文檔具有更好的可讀性,因為它們使用類似于HTML的標簽結構。這對于需要人工解析和編輯的文檔特別有用。而JSON文檔的鍵值對結構更緊湊,但在可讀性方面可能不如XML。gU528資訊網——每日最新資訊28at.com

標準化和互操作性:XML 有一個強大的標準體系,包括 XML Schema、XSLT、XPath 等,這使得 XML 在跨平臺、跨語言的數據交換中非常受歡迎。而JSON雖然也有一些標準(如JSON Schema),但其普及度和成熟度不如XML。gU528資訊網——每日最新資訊28at.com

數據綁定和模式:XML 支持將數據結構與標記語言(如 HTML)結合使用,這使得 XML 非常適合用于數據綁定。而JSON更傾向于簡單的鍵值對結構,沒有這種數據綁定功能。gU528資訊網——每日最新資訊28at.com

數據類型:XML 支持內置的數據類型(如整數、布爾值等),這有助于更準確地表示數據。而JSON的數據類型系統更為簡單,只支持基本的數據類型和數組。gU528資訊網——每日最新資訊28at.com

而如今采樣XML格式進行輸出的已經非常少了,不過像銀行這樣的系統還是非常多的,最近做的一個項目與農行對接他們的接口就是采用XML進行數據交換(真麻煩啊,不過還好之前了解過JAXB)。gU528資訊網——每日最新資訊28at.com

接下來我們通過實例講解在SpringBoot中如何控制輸出XML數據格式gU528資訊網——每日最新資訊28at.com

2. 實戰案例

2.1 通過jackson

首先需要在項目中引入jackson xml依賴包gU528資訊網——每日最新資訊28at.com

<dependency>  <groupId>com.fasterxml.jackson.dataformat</groupId>  <artifactId>jackson-dataformat-xml</artifactId></dependency>

隨意定義數據模型gU528資訊網——每日最新資訊28at.com

public class Message {  private String title ;  private String content ;}

Controller接口gU528資訊網——每日最新資訊28at.com

@RestController@RequestMapping("/mfc")public class MessageFormatController {    @GetMapping(value = "/index")  public Object index() {    return new Message("標題", "內容") ;  }  }

訪問接口gU528資訊網——每日最新資訊28at.com

圖片圖片gU528資訊網——每日最新資訊28at.com

輸出了XML,是不是覺得非常奇怪,就引入了xml依賴什么配置都沒有就輸出了XML數據格式。這是由于在容器在初始化HttpMessageConverter消息轉換器時有判斷,如果存在XML相關的轉換起就會加入到其中。gU528資訊網——每日最新資訊28at.com

public class WebMvcConfigurationSupport {  private static final boolean jackson2XmlPresent;  static {    jackson2XmlPresent = ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader);  }  protected final void addDefaultHttpMessageConverters(List<HttpMessageConverter<?>> messageConverters) {    if (jackson2XmlPresent) {      Jackson2ObjectMapperBuilder builder = Jackson2ObjectMapperBuilder.xml();      if (this.applicationContext != null) {        builder.applicationContext(this.applicationContext);      }      messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.build()));    }  }}

而上面的類方法的調用是初始化HttpMessageConverters時創建gU528資訊網——每日最新資訊28at.com

public class HttpMessageConvertersAutoConfiguration {  @Bean  @ConditionalOnMissingBean  public HttpMessageConverters messageConverters(ObjectProvider<HttpMessageConverter<?>> converters)    // 在該構造方法中調用上面的方法初始化默認的轉換器    return new HttpMessageConverters(converters.orderedStream().toList()) ;  }}

這里是一個過程,其實本身MappingJackson2XmlHttpMessageConverter也被定義為bean對象了。gU528資訊網——每日最新資訊28at.com

protected static class MappingJackson2XmlHttpMessageConverterConfiguration {  @Bean  @ConditionalOnMissingBean  public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter(      Jackson2ObjectMapperBuilder builder) {    return new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build());  }}

自定義XML的標簽名稱gU528資訊網——每日最新資訊28at.com

@JacksonXmlRootElement(localName = "msg")public class Message {  private String title ;  @JacksonXmlProperty(localName = "body")  private String content ;}

輸出如下gU528資訊網——每日最新資訊28at.com

圖片圖片gU528資訊網——每日最新資訊28at.com

而對于上面的接口,我們可以通過Accept請求header控制輸出的消息格式gU528資訊網——每日最新資訊28at.com

圖片圖片gU528資訊網——每日最新資訊28at.com

2.2 使用Xml視圖技術

@RestController@RequestMapping("/jaxb")public class JaxbController {  @GetMapping("/xml")  public ModelAndView xml() {    MappingJackson2XmlView view = new MappingJackson2XmlView() ;    ModelAndView model = new ModelAndView(view) ;    Map<String, Object> modelMap = new HashMap<>() ;    modelMap.put("user", new User(66, "張三", "女")) ;    modelMap.put("zs", new User(55, "李四", "男")) ;    view.setModelKey("zs") ;    model.addAllObjects(modelMap) ;    return model ;  }}

數據模型定義gU528資訊網——每日最新資訊28at.com

@XmlRootElement(name = "user")public class User {  private Integer age ;  private String name ;  private String sex ;}

輸出如下gU528資訊網——每日最新資訊28at.com

gU528資訊網——每日最新資訊28at.com

2.3 使用JAXB技術

@GetMapping("/marshaller")public MarshallingView marshaller() {  Jaxb2Marshaller marshaller = new Jaxb2Marshaller() ;  marshaller.setClassesToBeBound(User.class) ;  MarshallingView view = new MarshallingView(marshaller) ;  view.getAttributesMap().put("user", new User(22, "張三", "男")) ;  return view ;}

輸出如下gU528資訊網——每日最新資訊28at.com

圖片gU528資訊網——每日最新資訊28at.com

嵌套屬性支持gU528資訊網——每日最新資訊28at.com

@XmlRootElement(name = "user")public class User {  private Integer age ;  private String name ;  private String sex ;  @XmlElement(name = "address")  private Address address = new Address("四川", "成都") ;  }

輸出gU528資訊網——每日最新資訊28at.com

圖片圖片gU528資訊網——每日最新資訊28at.com

以上基于JAXB需要引入如下依賴包:gU528資訊網——每日最新資訊28at.com

<dependency>  <groupId>jakarta.xml.bind</groupId>  <artifactId>jakarta.xml.bind-api</artifactId></dependency><dependency>  <groupId>org.glassfish.jaxb</groupId>  <artifactId>jaxb-runtime</artifactId></dependency><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-oxm</artifactId></dependency>

以上就是有關輸出XML的所有內容,希望本文對你有所幫助。gU528資訊網——每日最新資訊28at.com

完畢!!!gU528資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-68325-0.html接口響應以XML數據格式輸出,這些方法你都知道嗎?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Dalvik與ART的架構差異,你學會了嗎?

下一篇: 如何使用Python、Apache Kafka和云平臺構建健壯的實時數據管道

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • 影音體驗是真的強 簡單聊聊iQOO Pad

    大公司的好處就是產品線豐富,非常細分化的東西也能給你做出來,例如早先我們看到了新的vivo Pad2,之后我們又在iQOO Neo8 Pro的發布會上看到了iQOO的首款平板產品iQOO Pad。雖
  • SpringBoot中使用Cache提升接口性能詳解

    環境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架從 3.1 開始,對 Spring 應用程序提供了透明式添加緩存的支持。和事務支持一樣,抽象緩存允許一致地使用各
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 華為HarmonyOS 4升級計劃公布:首批34款機型今日開啟公測

    8月4日消息,今天下午華為正式發布了HarmonyOS 4系統,在更流暢的前提下,還帶來了不少新功能,UI設計也有變化,會讓手機煥然一新。華為宣布,首批機型將會在
  • 首發天璣9200+ iQOO Neo8系列發布首銷售價2299元起

    2023年5月23日晚,iQOO Neo8系列正式發布。其中,Neo系列首款Pro之作——iQOO Neo8 Pro強悍登場,限時售價3099元起;價位段最強性能手機iQOO Neo8同期上市
  • SN570 NVMe SSD固態硬盤 價格與性能兼具

    SN570 NVMe SSD固態硬盤是西部數據發布的最新一代WD Blue系列的固態硬盤,不僅閃存技術更為精進,性能也得到了進一步的躍升。WD Blue SN570 NVMe SSD的包裝外
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
Top 主站蜘蛛池模板: 石狮市| 大宁县| 隆林| 浙江省| 迁西县| 彭泽县| 井研县| 称多县| 宁蒗| 瑞丽市| 延津县| 延吉市| 德化县| 青田县| 桃园市| 濮阳县| 丰镇市| 庄浪县| 鹰潭市| 乐安县| 万盛区| 九寨沟县| 黎城县| 中方县| 岚皋县| 新干县| 鹤庆县| 利津县| 秭归县| 丽水市| 偃师市| 栾城县| 武穴市| 阿巴嘎旗| 交城县| 麟游县| 桐庐县| 富民县| 宁陕县| 柞水县| 北辰区|