可讀性:XML" />

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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

接口響應(yīng)以XML數(shù)據(jù)格式輸出,這些方法你都知道嗎?

來(lái)源: 責(zé)編: 時(shí)間:2024-01-26 09:02:19 237觀看
導(dǎo)讀環(huán)境:SpringBoot3.1.7 + JDK171. 簡(jiǎn)介XML與JSON都是用于數(shù)據(jù)交換的格式,但它們之間存在一些關(guān)鍵差異,決定了何時(shí)應(yīng)該使用XML而不是JSON,以及何時(shí)應(yīng)該使用JSON而不是XML?一般會(huì)從如下幾方面考慮使用哪種數(shù)據(jù)格式:
可讀性:XML

環(huán)境:SpringBoot3.1.7 + JDK17rKb28資訊網(wǎng)——每日最新資訊28at.com

1. 簡(jiǎn)介

XML與JSON都是用于數(shù)據(jù)交換的格式,但它們之間存在一些關(guān)鍵差異,決定了何時(shí)應(yīng)該使用XML而不是JSON,以及何時(shí)應(yīng)該使用JSON而不是XML?一般會(huì)從如下幾方面考慮使用哪種數(shù)據(jù)格式:
rKb28資訊網(wǎng)——每日最新資訊28at.com

可讀性:XML 文檔具有更好的可讀性,因?yàn)樗鼈兪褂妙?lèi)似于HTML的標(biāo)簽結(jié)構(gòu)。這對(duì)于需要人工解析和編輯的文檔特別有用。而JSON文檔的鍵值對(duì)結(jié)構(gòu)更緊湊,但在可讀性方面可能不如XML。rKb28資訊網(wǎng)——每日最新資訊28at.com

標(biāo)準(zhǔn)化和互操作性:XML 有一個(gè)強(qiáng)大的標(biāo)準(zhǔn)體系,包括 XML Schema、XSLT、XPath 等,這使得 XML 在跨平臺(tái)、跨語(yǔ)言的數(shù)據(jù)交換中非常受歡迎。而JSON雖然也有一些標(biāo)準(zhǔn)(如JSON Schema),但其普及度和成熟度不如XML。rKb28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)綁定和模式:XML 支持將數(shù)據(jù)結(jié)構(gòu)與標(biāo)記語(yǔ)言(如 HTML)結(jié)合使用,這使得 XML 非常適合用于數(shù)據(jù)綁定。而JSON更傾向于簡(jiǎn)單的鍵值對(duì)結(jié)構(gòu),沒(méi)有這種數(shù)據(jù)綁定功能。rKb28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)類(lèi)型:XML 支持內(nèi)置的數(shù)據(jù)類(lèi)型(如整數(shù)、布爾值等),這有助于更準(zhǔn)確地表示數(shù)據(jù)。而JSON的數(shù)據(jù)類(lèi)型系統(tǒng)更為簡(jiǎn)單,只支持基本的數(shù)據(jù)類(lèi)型和數(shù)組。rKb28資訊網(wǎng)——每日最新資訊28at.com

而如今采樣X(jué)ML格式進(jìn)行輸出的已經(jīng)非常少了,不過(guò)像銀行這樣的系統(tǒng)還是非常多的,最近做的一個(gè)項(xiàng)目與農(nóng)行對(duì)接他們的接口就是采用XML進(jìn)行數(shù)據(jù)交換(真麻煩啊,不過(guò)還好之前了解過(guò)JAXB)。rKb28資訊網(wǎng)——每日最新資訊28at.com

接下來(lái)我們通過(guò)實(shí)例講解在SpringBoot中如何控制輸出XML數(shù)據(jù)格式rKb28資訊網(wǎng)——每日最新資訊28at.com

2. 實(shí)戰(zhàn)案例

2.1 通過(guò)jackson

首先需要在項(xiàng)目中引入jackson xml依賴包rKb28資訊網(wǎng)——每日最新資訊28at.com

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

隨意定義數(shù)據(jù)模型rKb28資訊網(wǎng)——每日最新資訊28at.com

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

Controller接口rKb28資訊網(wǎng)——每日最新資訊28at.com

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

訪問(wèn)接口rKb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rKb28資訊網(wǎng)——每日最新資訊28at.com

輸出了XML,是不是覺(jué)得非常奇怪,就引入了xml依賴什么配置都沒(méi)有就輸出了XML數(shù)據(jù)格式。這是由于在容器在初始化HttpMessageConverter消息轉(zhuǎn)換器時(shí)有判斷,如果存在XML相關(guān)的轉(zhuǎn)換起就會(huì)加入到其中。rKb28資訊網(wǎng)——每日最新資訊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()));    }  }}

而上面的類(lèi)方法的調(diào)用是初始化HttpMessageConverters時(shí)創(chuàng)建rKb28資訊網(wǎng)——每日最新資訊28at.com

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

這里是一個(gè)過(guò)程,其實(shí)本身MappingJackson2XmlHttpMessageConverter也被定義為bean對(duì)象了。rKb28資訊網(wǎng)——每日最新資訊28at.com

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

自定義XML的標(biāo)簽名稱(chēng)rKb28資訊網(wǎng)——每日最新資訊28at.com

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

輸出如下rKb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rKb28資訊網(wǎng)——每日最新資訊28at.com

而對(duì)于上面的接口,我們可以通過(guò)Accept請(qǐng)求header控制輸出的消息格式rKb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rKb28資訊網(wǎng)——每日最新資訊28at.com

2.2 使用Xml視圖技術(shù)

@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 ;  }}

數(shù)據(jù)模型定義rKb28資訊網(wǎng)——每日最新資訊28at.com

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

輸出如下rKb28資訊網(wǎng)——每日最新資訊28at.com

rKb28資訊網(wǎng)——每日最新資訊28at.com

2.3 使用JAXB技術(shù)

@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 ;}

輸出如下rKb28資訊網(wǎng)——每日最新資訊28at.com

圖片rKb28資訊網(wǎng)——每日最新資訊28at.com

嵌套屬性支持rKb28資訊網(wǎng)——每日最新資訊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("四川", "成都") ;  }

輸出rKb28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rKb28資訊網(wǎng)——每日最新資訊28at.com

以上基于JAXB需要引入如下依賴包:rKb28資訊網(wǎng)——每日最新資訊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>

以上就是有關(guān)輸出XML的所有內(nèi)容,希望本文對(duì)你有所幫助。rKb28資訊網(wǎng)——每日最新資訊28at.com

完畢!!!rKb28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Dalvik與ART的架構(gòu)差異,你學(xué)會(huì)了嗎?

下一篇: 如何使用Python、Apache Kafka和云平臺(tái)構(gòu)建健壯的實(shí)時(shí)數(shù)據(jù)管道

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 一加Ace2 Pro真機(jī)揭曉 鈦空灰配色質(zhì)感拉滿

    終于,在經(jīng)過(guò)了幾波預(yù)熱之后,一加Ace2 Pro的外觀真機(jī)圖在網(wǎng)上出現(xiàn)了。還是博主數(shù)碼閑聊站曝光的,這次的外觀設(shè)計(jì)還是延續(xù)了一加11的方案,只是細(xì)節(jié)上有了調(diào)整,例如新加入了鈦空灰
  • 十個(gè)簡(jiǎn)單但很有用的Python裝飾器

    裝飾器(Decorators)是Python中一種強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或類(lèi)的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)或類(lèi)作為參數(shù),并返回一個(gè)新的函數(shù)或類(lèi)。它們通常用
  • 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

    谷歌在KDD 2023發(fā)表了一篇工作,探索了推薦系統(tǒng)ranking模型的訓(xùn)練穩(wěn)定性問(wèn)題,分析了造成訓(xùn)練穩(wěn)定性存在問(wèn)題的潛在原因,以及現(xiàn)有的一些提升模型穩(wěn)定性方法的不足,并提出了一種新
  • Python異步IO編程的進(jìn)程/線程通信實(shí)現(xiàn)

    這篇文章再講3種方式,同時(shí)講4中進(jìn)程間通信的方式一、 Python 中線程間通信的實(shí)現(xiàn)方式共享變量共享變量是多個(gè)線程可以共同訪問(wèn)的變量。在Python中,可以使用threading模塊中的L
  • 得物寵物生意「狂飆」,發(fā)力“它經(jīng)濟(jì)”

    作者|花花小萌主近日,得物宣布正式上線寵物鑒別,通過(guò)得物App內(nèi)的&ldquo;在線鑒別&rdquo;,可找到鑒別寵物的選項(xiàng)。通過(guò)上傳自家寵物的部位細(xì)節(jié),就能收獲擁有專(zhuān)業(yè)資質(zhì)認(rèn)證的得物鑒
  • 猿輔導(dǎo)與新東方的兩種“歸途”

    作者|卓心月 出品|零態(tài)LT(ID:LingTai_LT)如何成為一家偉大企業(yè)?答案一定是對(duì)&ldquo;勢(shì)&rdquo;的把握,這其中最關(guān)鍵的當(dāng)屬對(duì)企業(yè)戰(zhàn)略的制定,且能夠站在未來(lái)看現(xiàn)在,即使這其中的
  • 新電商三兄弟,“抖快紅”成團(tuán)!

    來(lái)源:價(jià)值研究所作 者:Hernanderz 隨著內(nèi)容電商的概念興起,抖音、快手、小紅書(shū)組成的&ldquo;新電商三兄弟&rdquo;成為業(yè)內(nèi)一股不可忽視的勢(shì)力,給阿里、京東、拼多多帶去了巨大壓
  • OPPO K11搭載長(zhǎng)壽版100W超級(jí)閃充:26分鐘充滿100%

    據(jù)此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發(fā)布會(huì),屆時(shí)全新的OPPO K11將正式與大家見(jiàn)面,將主打旗艦影像,和同檔位競(jìng)品相比,其最大的賣(mài)
  • Counterpoint :OPPO雙旗艦戰(zhàn)略全面落地 高端產(chǎn)品銷(xiāo)量增長(zhǎng)22%

    2023年6月30日,全球行業(yè)分析機(jī)構(gòu)Counterpoint Research發(fā)布的《中國(guó)智能手機(jī)高端市場(chǎng)白皮書(shū)》顯示,中國(guó)智能手機(jī)品牌正在尋求高質(zhì)量發(fā)展,中國(guó)高端智能
Top 主站蜘蛛池模板: 莒南县| 富川| 自治县| 长丰县| 普洱| 德化县| 武强县| 凯里市| 汉阴县| 海宁市| 应城市| 新蔡县| 湘潭县| 三明市| 巴青县| 黑水县| 上蔡县| 新巴尔虎右旗| 新丰县| 宁明县| 定远县| 临洮县| 津市市| 辉南县| 班玛县| 甘洛县| 铁力市| 八宿县| 长白| 华容县| 中江县| 武乡县| 南漳县| 万源市| 离岛区| 康保县| 额尔古纳市| 五莲县| 崇左市| 上杭县| 蚌埠市|