可讀性:XML" />

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

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

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

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

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

1. 簡介

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

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

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

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

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

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

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

2. 實戰(zhàn)案例

2.1 通過jackson

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

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

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

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

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

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

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

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

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

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

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

這里是一個過程,其實本身MappingJackson2XmlHttpMessageConverter也被定義為bean對象了。5dj28資訊網(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)簽名稱5dj28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

圖片圖片5dj28資訊網(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ù)模型定義5dj28資訊網(wǎng)——每日最新資訊28at.com

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

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

5dj28資訊網(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 ;}

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

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

嵌套屬性支持5dj28資訊網(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("四川", "成都") ;  }

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

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

以上基于JAXB需要引入如下依賴包:5dj28資訊網(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)容,希望本文對你有所幫助。5dj28資訊網(wǎng)——每日最新資訊28at.com

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

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

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

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

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

標(biāo)簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 荔波县| 武鸣县| 闽侯县| 梧州市| 岢岚县| 涞源县| 长白| 岚皋县| 林周县| 贵港市| 杭锦后旗| 沽源县| 吐鲁番市| 远安县| 太仆寺旗| 万宁市| 成安县| 寿光市| 麻江县| 阜康市| 普兰店市| 登封市| 麻栗坡县| 尉犁县| 迁安市| 巴里| 汤阴县| 湘潭市| 英山县| 上杭县| 宿州市| 阜南县| 肥乡县| 安龙县| 阿拉善左旗| 玛纳斯县| 大丰市| 宝应县| 枝江市| 斗六市| 炎陵县|