精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 前端
XML與JSON都是用于數據交換的格式,但它們之間存在一些關鍵差異,決定了何時應該使用XML而不是JSON,以及何時應該使用JSON而不是XML?

環境:SpringBoot3.1.7 + JDK17

1. 簡介

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

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

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

數據綁定和模式:XML 支持將數據結構與標記語言(如 HTML)結合使用,這使得 XML 非常適合用于數據綁定。而JSON更傾向于簡單的鍵值對結構,沒有這種數據綁定功能。

數據類型:XML 支持內置的數據類型(如整數、布爾值等),這有助于更準確地表示數據。而JSON的數據類型系統更為簡單,只支持基本的數據類型和數組。

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

接下來我們通過實例講解在SpringBoot中如何控制輸出XML數據格式

2. 實戰案例

2.1 通過jackson

首先需要在項目中引入jackson xml依賴包

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

隨意定義數據模型

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

Controller接口

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

訪問接口

圖片圖片

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

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時創建

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

這里是一個過程,其實本身MappingJackson2XmlHttpMessageConverter也被定義為bean對象了。

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

自定義XML的標簽名稱

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

輸出如下

圖片圖片

而對于上面的接口,我們可以通過Accept請求header控制輸出的消息格式

圖片圖片

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

數據模型定義

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

輸出如下

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

輸出如下

圖片

嵌套屬性支持

@XmlRootElement(name = "user")
public class User {


  private Integer age ;
  private String name ;
  private String sex ;
  @XmlElement(name = "address")
  private Address address = new Address("四川", "成都") ;
  
}

輸出

圖片圖片

以上基于JAXB需要引入如下依賴包:

<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的所有內容,希望本文對你有所幫助。

完畢!!!

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2024-04-28 08:20:52

Controller接口URL

2016-01-11 09:48:07

2021-08-05 18:21:29

Autowired代碼spring

2018-08-07 09:29:35

數據庫MySQL優化方法

2016-03-18 19:03:35

認知計算IBM

2022-11-10 09:00:41

2019-07-08 10:18:38

MPLSIP數據

2019-02-12 11:15:15

Spring設計模式Java

2015-07-03 11:20:41

編程學習方法

2024-03-26 10:10:45

JavaScript操作符操作表達式

2023-02-15 08:12:19

http超時過濾器

2021-07-29 06:55:03

Spring@AutowriedbyType注入

2020-05-27 11:30:54

Chrome DevT前端命令

2022-09-07 09:01:14

JS操作符運算符

2020-10-28 11:20:55

vue項目技

2021-04-10 07:04:00

WPS技巧辦公軟件

2020-02-20 08:30:49

OSPF網絡協議路由協議

2018-02-06 09:06:03

主流分布式存儲系統

2023-02-01 08:31:36

JavaScript循環遍歷

2015-06-29 09:06:51

點贊
收藏

51CTO技術棧公眾號

www..com久久爱| 青青青国内视频在线观看软件| 亚洲综合国产| 精品中文字幕久久久久久| 丰满爆乳一区二区三区| 青春有你2免费观看完整版在线播放高清 | 18禁免费无码无遮挡不卡网站| 国产成人三级在线观看视频| 亚洲一区二区网站| 伊人激情综合网| 日本高清免费在线视频| 欧美人与动牲性行为| 99热国产精品| 国产精品亚洲欧美导航| 欧美国产日韩在线观看成人| 日本精品影院| 欧美日韩综合一区| 成人一级生活片| 蜜桃视频在线免费| 国产一区不卡精品| 7m精品福利视频导航| 中文字幕黄色网址| 999国产精品一区| 在线观看欧美精品| a级黄色片免费| 免费黄色在线视频网站| 狠狠色丁香久久婷婷综| 5566成人精品视频免费| 在线观看日本黄色| 国产精品欧美大片| 欧美日韩一区二区三区四区五区| 国产女教师bbwbbwbbw| 粉嫩av一区| 99这里都是精品| 国产综合色香蕉精品| 日韩三级小视频| 99久久综合| 亚洲美女av黄| 极品白嫩少妇无套内谢| 外国电影一区二区| 亚洲成人av电影| 免费观看黄色的网站| 青青草在线播放| 国产成a人无v码亚洲福利| 国产精品九九九| 国产特黄大片aaaa毛片| 亚洲欧洲中文字幕| 中文字幕综合在线| 欧美做受高潮6| 理论片一区二区在线| 777久久久精品| 激情视频综合网| 中文在线8资源库| 亚洲韩国精品一区| 在线观看污视频| 又爽又大又黄a级毛片在线视频| av动漫一区二区| 91亚色免费| 97超碰国产在线| 免费黄网站欧美| 日本久久久久久| 黄网在线观看视频| 亚洲精选一区| 97国产一区二区精品久久呦| 免费日韩在线视频| 伊人色**天天综合婷婷| 中文字幕亚洲欧美日韩2019| 五月激情四射婷婷| 欧美美女在线| 亚洲欧美在线播放| 黄瓜视频污在线观看| 亚洲香蕉久久| 欧美高清性hdvideosex| 久久出品必属精品| 白嫩亚洲一区二区三区| 欧美精品欧美精品系列| 色噜噜狠狠永久免费| av成人亚洲| 欧美视频完全免费看| 嫩草av久久伊人妇女超级a| 波多视频一区| 91福利在线看| 视频二区在线播放| 国产精品日韩精品在线播放| 欧美一区二区视频在线观看2020| 精品国产乱码久久久久久1区二区 91网址在线观看精品 | 久久精品97| 在线播放欧美女士性生活| 中文字幕一区二区三区四区在线视频| 国产精品久久亚洲不卡| 欧美日韩精品一区二区三区四区| 国产3p在线播放| 成人一级视频| 日韩欧美国产不卡| 最新在线黄色网址| 精品欧美激情在线观看| 久久亚洲精品国产亚洲老地址| 黄色一级视频免费观看| 亚洲国产国产亚洲一二三| 日本成人激情视频| www.国产com| 日韩av电影一区| 国产精品人成电影| 午夜精品一二三区| 96av麻豆蜜桃一区二区| 亚洲五月六月| 日韩三级免费| 色综合久久天天综合网| 亚洲天堂网2018| 成人福利一区| 亚洲男人天堂网| 亚洲色成人网站www永久四虎| 91精品天堂福利在线观看| 久久久久久久久久久av| 久久国产乱子伦精品| 国产剧情一区在线| 欧美另类高清视频在线| av毛片在线看| 欧美午夜影院在线视频| 911福利视频| 欧美成人午夜77777| 少妇精69xxtheporn| 亚欧视频在线观看| 久久超级碰视频| 精品国产乱码久久久久| 成人高潮成人免费观看| 亚洲青青青在线视频| 国产一区视频免费观看| 麻豆久久一区| 一区二区亚洲精品国产| 久草免费在线观看视频| 老司机精品视频在线| 国产手机精品在线| 黄色网址免费在线观看| 欧美天堂在线观看| 无码人妻久久一区二区三区蜜桃| 欧美美女一区| 91高潮在线观看| 国产视频一区二区三| 国产色一区二区| 一本久道高清无码视频| 亚洲18在线| 亚洲精品国产欧美| 久久久久久久久久久久久久久久久| 日韩电影在线一区| 久久久久久高清| 国产精品一区hongkong| 日韩一级完整毛片| 免费成人美女女在线观看| 久久伊人亚洲| av噜噜色噜噜久久| 麻豆网站在线免费观看| 欧美性受xxxx| 波多野结衣片子| 一区二区三区精品视频在线观看 | 成人毛片18女人毛片| 丰满放荡岳乱妇91ww| 最新av网址在线观看| 日韩欧乱色一区二区三区在线| 亚洲国产精品成人精品| 国产在线视频第一页| 国产无套粉嫩白浆内谢的出处| 欧美xxx性| 国产亚洲激情在线| 97人妻精品视频一区| 国产欧美日韩激情| 91小视频在线播放| 欧美日本免费| 国产一区二区在线网站 | 成人激情免费视频| 国产乱肥老妇国产一区二| 日本三级视频在线播放| 日韩午夜在线影院| 日本免费在线播放| 久久久综合九色合综国产精品| 成人免费视频久久| 我不卡手机影院| 成人免费看片网站| 中文在线免费二区三区| 最近2019中文字幕大全第二页| 国产绳艺sm调教室论坛| 午夜精品久久久久| 欧美巨胸大乳hitomi| 国产成人av电影在线观看| 鲁一鲁一鲁一鲁一色| 精品视频免费在线观看| 亚洲影院色无极综合| 无码内射中文字幕岛国片| 日韩电影免费观| 久久久国产精品视频| 黄色一级大片在线免费看国产一 | 国产精品久久久久久亚洲毛片| 日韩欧美色视频| 国产偷自视频区视频一区二区| 欧美日韩精品免费观看| 精品一区二区三区免费看| 97在线视频免费看| 97超碰国产一区二区三区| 日韩精品中午字幕| 波多野结衣高清视频| 曰韩精品一区二区| 国产高潮呻吟久久| 国产成人av一区| 久久久久国产一区| 一本久久综合| 日本一道在线观看| 久久最新网址| 国产一区二区免费电影| 亚洲国产综合在线观看| 欧美一级免费视频| 丝袜美腿av在线| 中文字幕亚洲欧美一区二区三区 | 最近中文字幕2019免费| 天天色综合久久| 欧美一区二区播放| 国产男人搡女人免费视频| 亚洲综合丁香婷婷六月香| 女教师淫辱の教室蜜臀av软件| 99精品久久久久久| 绯色av蜜臀vs少妇| 精品亚洲国产成人av制服丝袜| 国产精品97在线| 一区二区自拍| 韩国黄色一级大片| 色婷婷综合网| 日本一区不卡| 视频一区在线观看| 国产日韩精品一区观看| 亚洲一区二区三区免费| 91在线直播亚洲| 99热这里有精品| 国产精品综合不卡av| 成人做爰免费视频免费看| 2019亚洲日韩新视频| av第一福利在线导航| 欧美另类99xxxxx| 亚洲夜夜综合| 久久6免费高清热精品| a毛片在线播放| 久久精品欧美视频| 理论片午午伦夜理片在线播放| 亚洲另类欧美自拍| 天堂成人在线| 日韩精品999| 在线观看xxx| 亚洲精品在线91| 日韩欧美电影在线观看| 日韩精品极品在线观看播放免费视频 | 久久99精品久久只有精品| 日韩大片一区二区| 日本成人在线电影网| 搡女人真爽免费午夜网站| 日韩在线卡一卡二| 日本激情综合网| 日本sm残虐另类| 欧美美女一级片| 国产麻豆一精品一av一免费| 欧美69精品久久久久久不卡| 粉嫩久久99精品久久久久久夜| 国产精品99久久久精品无码| 粉嫩av一区二区三区| 超碰caoprom| 久久综合色之久久综合| 欧美图片第一页| 中文字幕乱码日本亚洲一区二区| 国产视频精品免费| 亚洲蜜臀av乱码久久精品蜜桃| 精品少妇一二三区| 精品magnet| 男人天堂视频在线| 欧美电影在线免费观看| 精品国产伦一区二区三区| 亚洲第一偷拍网| 精彩国产在线| 日韩中文字幕视频| a毛片不卡免费看片| 日本成熟性欧美| 国产高清视频一区二区| 国语精品免费视频| 欧美日韩精品在线一区| 超碰免费在线公开| 国产毛片久久| 一区二区xxx| 福利视频网站一区二区三区| 色无极影院亚洲| 一区二区三区在线观看国产| 中文字幕第四页| 欧美精品视频www在线观看| 国内爆初菊对白视频| 国产一区二区三区中文| caoporn免费在线视频| 8x拔播拔播x8国产精品| 国模私拍国内精品国内av| 成人午夜影院在线观看| 国产伦一区二区三区| 性做爰过程免费播放| 99精品国产在热久久| 日韩大片一区二区| 99久久99久久精品免费看蜜桃| 婷婷综合在线视频| 亚洲成av人片在线| 91精品视频免费在线观看 | 成人在线免费视频| 欧美激情精品久久久久| 久久免费资源| 就去色蜜桃综合| 欧美午夜一区二区福利视频| 免费一区二区三区在线观看| jizz一区二区| 天堂网avav| 欧美日韩中文字幕精品| 亚洲 欧美 激情 小说 另类| 久久成人18免费网站| 惠美惠精品网| 国产三区二区一区久久| 在线电影一区二区| 免费看黄色一级大片| 91亚洲男人天堂| 国产真人真事毛片| 欧美一卡二卡三卡| 调教视频免费在线观看| 热99精品里视频精品| 巨人精品**| 青青草国产免费| 国产一区二区日韩精品| 久久久久人妻一区精品色| 日韩欧美在线免费| 亚洲区小说区图片区| 欧美激情免费看| 欧洲精品99毛片免费高清观看| 中文字幕一区二区三区四区五区| 日本欧美大码aⅴ在线播放| 黄瓜视频污在线观看| 狠狠久久亚洲欧美专区| 男人天堂一区二区| 欧美国产一区二区三区| 日韩欧洲国产| 操bbb操bbb| 国产一区二区福利| 538精品在线视频| 91精品国产综合久久久久| 麻豆免费在线视频| 成人午夜高潮视频| 亚洲综合激情在线| 久久久久久国产精品日本| 亚洲日本中文字幕区| 国产精品午夜福利| 久久亚洲欧美日韩精品专区 | 日本亚洲视频在线| 中文字幕第二区| 欧美日韩国产欧美日美国产精品| 91se在线| 成人疯狂猛交xxx| 亚洲精品国产首次亮相| 韩国三级在线播放| 亚洲国产精品一区二区www在线 | 男女激情无遮挡| 91久色porny| 中文字幕乱码中文字幕| 日韩有码在线视频| 欧美国产中文高清| cao在线观看| 久久久久亚洲综合| 91欧美日韩麻豆精品| 久久99久久亚洲国产| 国产精品xxxav免费视频| 播放灌醉水嫩大学生国内精品| 久久久久久久久久久久久久久99| 一级黄色在线观看| 精品久久国产精品| 国产精品国产| 男人天堂成人在线| 亚洲免费在线电影| 先锋av资源站| 国产精品吴梦梦| 欧美性久久久| 亚洲午夜久久久久久久久红桃 | 网站一区二区三区| 亚洲欧美成人一区二区三区| 免费国产黄色片| 国产激情综合五月久久| 亚洲国产精品久久久天堂| 日韩精品视频一区二区| 在线看不卡av| 色在线视频网| 日韩欧美亚洲v片| 国产精品一区二区在线观看不卡 | 亚洲国产91色在线| 亚洲伦理影院| 好吊色视频988gao在线观看| 久久久午夜精品| 99国产精品欲| 国产suv精品一区二区| 一二三区不卡| 黄色在线观看av| 欧美一区二区三区不卡| 久久久一本精品| 日本福利视频一区| 国产精品卡一卡二卡三| 天堂8在线视频|