最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot基于JAXB實現(xiàn)天地圖路徑規(guī)劃結果XML轉JSON

 更新時間:2025年02月28日 10:15:19   作者:夜郎king  
這篇文章主要為大家詳細介紹了SpringBoot如何基于JAXB實現(xiàn)將天地圖路徑規(guī)劃結果XML轉JSON功能,文中的示例代碼講解詳細,需要的可以了解下

前言

在之前的博文中在SpringBoot中使用UniHttp簡化天地圖路徑規(guī)劃調用實踐。在這篇文章中,我們實現(xiàn)了在SpringBoot中調用天地圖的Web接口調用,從而獲取相應駕車的路徑規(guī)劃信息。雖然整體的流程已經(jīng)走通了,但是在天地圖的路徑規(guī)劃接口的響應參數(shù)中,返回的數(shù)據(jù)格式是xml的。雖然xml也可以作為一種標準的接口傳輸數(shù)據(jù)類型,但是現(xiàn)代的接口調用中,通常返回的數(shù)據(jù)類型基本是以JSON為主。為了讓接口更加具有通用性,可以對接更多的第三方接口,為別的業(yè)務平臺提供更好的服務。將天地圖返回的XML轉換為標準的JSON數(shù)據(jù)也就非常有必要。

本文即在這樣的背景下產(chǎn)生,博文首先對天地圖返回的XML信息元素進行詳細的介紹,包括其主要的子元素等方面,然后介紹在SpringBoot中使用JAXB實現(xiàn)對路徑規(guī)劃的對應的一一映射配置,最后完整的實現(xiàn)將天地圖的路徑規(guī)劃的XML數(shù)據(jù)轉為JSON格式。如果您當前也有業(yè)務是基于天地圖來構建,如果在構建相關服務的過程中也有需要將XML進行對應的處理,不妨來這里看看。

一、路徑規(guī)劃返回參數(shù)簡介

本節(jié)將對基于天地圖的路徑規(guī)劃服務接口中的返回參數(shù)進行詳細介紹。尤其是對其返回的XML返回參數(shù)的格式以及攜帶的子參數(shù)進行重點介紹。這將是文章的重點內容對如何構建對應的對象信息至關重要,請務必掌握這里的知識。這里分兩個部分來進行,首先是對返回的XML對象進行梳理,對齊包含的屬性和子元素信息進行介紹,最后是一個實例的介紹。

1、返回xml梳理

首先還是從官網(wǎng)入手,先來看一下天地圖的返回參數(shù)的介紹,天地圖駕車路徑規(guī)劃API地址,在瀏覽器中輸入以上的地址后,可以在其網(wǎng)站上看到以下的返回參數(shù)信息:

完整的XML響應內容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<result orig='起點經(jīng)緯度' mid='途徑點信息' dest='終點經(jīng)緯度'>
    <parameters>
        <orig>起點加密經(jīng)緯度</orig>
        <dest>終點加密經(jīng)緯度</dest>
        <mid>途徑點加密經(jīng)緯度集合</mid>
        <key>經(jīng)緯度加密的 key 值</key>
        <width>地圖寬度</width>
        <height>地圖高度</height>
        <style>導航路線類型</style>
        <version>版本控制</version>
        <sort>排序方式</sort>
    </parameters>
    <routes count='分段總數(shù)' time='查詢時間'>
        <item id='0'>
            <strguide>每段線路文字描述</strguide>
            <signage>“路牌”引導提示/高速路收費站出口信息</signage>
            <streetName>當前路段名稱</streetName>
            <nextStreetName>下一段道路名稱</nextStreetName>
            <tollStatus>道路收費信息(0=免費路段,1=收費路段,2=部分收費路段)</tollStatus>
            <turnlatlon>轉折點經(jīng)緯度</turnlatlon>
        </item>
        <item id='1'>
            ....
        </item>
        ....其他分段線路信息
    </routes>
    <simple>
        <item id='0'>
            <strguide>每段線路文字描述</strguide>
            <streetNames>當前行駛路段名稱(含多個路段)</streetNames>
            <lastStreetName>最后一段道路名稱</lastStreetName>
            <linkStreetName>合并段之間銜接的道路名稱</linkStreetName>
            <signage>“路牌”引導提示/高速路收費站出口信息</signage>
            <tollStatus>道路收費信息(0=免費路段,1=收費路段,2=部分收費路段)</tollStatus>
            <turnlatlon>轉折點經(jīng)緯度</turnlatlon>
            <streetLatLon>線路經(jīng)緯度</streetLatLon>
            <streetDistance>行駛總距離(單位:米)</streetDistance>
            <segmentNumber>合并后的號段,對應詳細描述中的號段</segmentNumber>
        </item>
        <item id='1'>
            ....
        </item>
        ....其他分段線路信息
    </simple>
    <distance>全長(單位:公里)</distance>
    <duration>行駛總時間(單位:秒)</duration>
    <routelatlon>線路經(jīng)緯度字符串</routelatlon>
    <mapinfo>
        <center>全部結果同時顯示的適宜中心經(jīng)緯度</center>
        <scale>全部結果同時顯示的適宜縮放比例</scale>
    </mapinfo>
</result>

從以上的思維導圖中可以看到,天地圖的路徑規(guī)劃接口返回的XML類型的數(shù)據(jù)中,其主要包含了這7類數(shù)據(jù),1是請求的參數(shù)信息,2是 完整的路徑規(guī)劃信息,3是簡化的路徑規(guī)劃信息,但是路徑規(guī)劃的詳細內容會稍微多一點,4是導航全程的距離,5是行駛的總時間,6是路線經(jīng)緯度字符串,7是地圖展示信息。

2、返回xml實例

下面依然以從長沙黃花機場到橘子洲的路徑規(guī)劃結果來對返回參數(shù)進行綜合介紹。為了減少對篇幅的占用,這里我展示的是簡單樣例部分的數(shù)據(jù)。如下圖所示:

按照前面內容展示信息,我們以簡化后的路徑規(guī)劃內容為例進行展示,可以看到全程路程大約31.13公里,行駛距離大約是2667.0秒,等于 44.5分鐘。在城區(qū)中形式,這個速度應該是差不多的。從黃花機場到橘子洲的大約形式路線如下:

先從起始點出發(fā),進入遠大一路/國道107,距離大約101米,然后沿遠大一路/國道107,遠大二路/省道103,車站中路/國道107,遠大三路/省道103,省道103,五一大道/國道107,機場大道行駛,進入橘洲路,這里行駛的距離大約是30771米,最后是沿橘洲路行駛到目的地,大約262米的樣子。

二、JAXB技術介紹

本節(jié)將重點介紹JAXB的相關技術,主要從以下兩個方面進行介紹。第一JAXB是什么?其次是JAXB能做什么?

1、JAXB是什么

JAXB(Java Architecture for XML Binding)是一種Java技術,它允許Java開發(fā)人員將Java對象映射為XML表示方式,并支持將XML實例文檔轉換為Java對象。‌ JAXB的主要功能包括將Java對象序列化為XML文檔,以及將XML文檔解析為Java對象。這使得開發(fā)者可以方便地在Java應用程序中處理XML數(shù)據(jù),而不需要編寫特定的XML解析代碼。‌

JAXB通過使用注解來定義Java類與XML文檔之間的映射關系。常用的注解包括@XmlRootElement、@XmlElement等,這些注解幫助開發(fā)者指定如何將Java對象轉換為XML格式,以及如何從XML格式解析數(shù)據(jù)。

2、JAXB能做什么

JAXB的應用場景

‌Web服務‌:在Web服務中,JAXB可以將Java對象序列化為XML文檔,以便在不同系統(tǒng)之間進行數(shù)據(jù)交換。‌XML文件讀寫‌:在讀寫XML文件時,JAXB可以將XML文檔轉換為Java對象,以便進行操作和處理。SOAP消息處理‌:在SOAP(Simple Object Access Protocol)消息處理中,JAXB可以用于將Java對象轉換為SOAP消息,或將SOAP消息轉換為Java對象。

JAXB是JDK 1.8中自帶的類‌。JAXB(Java Architecture for XML Binding)是J2SE和J2EE平臺的一部分,能夠快速完成Java類和XML的互相映射。因此想要在SpringBoot中使用JAXB的話,是非常容易進行集成的。

三、JAXB實現(xiàn)轉換

本節(jié)將重點介紹如何使用JAXB來實現(xiàn)XML向JSON的轉換。本小節(jié)依然從兩個比較重要的方面進行介紹,首先依然是詳細介紹如何進行實現(xiàn),其次是展示轉換過后的JSON數(shù)據(jù)。

1、詳細實現(xiàn)過程

由于JAXB是JDK默認的一種實現(xiàn),因此在我們的工程中無需刻意的引入,直接在代碼中使用相關的類即可。為了將XML中的每個屬性和子元素都有對應的對象和屬性來進行綁定。我們將根據(jù)XML的層級和屬性定義來分別創(chuàng)建不同的對象。

首先來定義一個天地圖的返回結果對象,代碼如下所示:

package com.yelang.project.education.domain.tdt;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import lombok.Data;
@XmlRootElement(name = "result")
@Data
@XmlAccessorType(XmlAccessType.FIELD)
public class TdtResult {
    @XmlAttribute(name = "orig")
    private String orig;
    @XmlAttribute(name = "mid")
    private String mid;
    @XmlAttribute(name = "dest")
    private String dest;
    @XmlElement(name = "parameters")
    private TdtParameters parameters;
    @XmlElement(name = "routes")
    private TdtRoutes routes;
    @XmlElement(name = "simple")
    private TdtSimple simple;
    @XmlElement(name = "distance")
    private String distance;
    @XmlElement(name = "duration")
    private String duration;
    @XmlElement(name = "routelatlon")
    private String routelatlon;
    @XmlElement(name = "mapinfo")
    private TdtMapInfo mapinfo;
    // Getters 和 Setters
}

接著來定義天地圖的參數(shù)對象,代碼如下所示:

package com.yelang.project.education.domain.tdt;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import lombok.Data;
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TdtParameters {
    @XmlElement(name = "orig")
    private String orig;
    @XmlElement(name = "dest")
    private String dest;
    @XmlElement(name = "mid")
    private String mid;
    @XmlElement(name = "key")
    private String key;
    @XmlElement(name = "width")
    private int width;
    @XmlElement(name = "height")
    private int height;
    @XmlElement(name = "style")
    private int style;
    @XmlElement(name = "version")
    private String version;
    @XmlElement(name = "sort")
    private String sort;
    // Getters 和 Setters
}

然后是完整的路徑規(guī)劃信息,這里需要有一個對象的子項對象類接收信息,代碼如下:

package com.yelang.project.education.domain.tdt;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import lombok.Data;
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TdtRoutes {
    @XmlAttribute(name = "count")
    private int count;
    @XmlAttribute(name = "time")
    private String time;
    @XmlElement(name = "item")
    private List<TdtRoutesItem> items;
}
package com.yelang.project.education.domain.tdt;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import lombok.Data;
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class TdtRoutesItem {
    @XmlAttribute(name = "id")
    private String id;
    @XmlElement(name = "strguide")
    private String strguide;
    @XmlElement(name = "signage")
    private String signage;
    @XmlElement(name = "streetName")
    private String streetName;
    @XmlElement(name = "nextStreetName")
    private String nextStreetName;
    @XmlElement(name = "tollStatus")
    private int tollStatus;
    @XmlElement(name = "turnlatlon")
    private String turnlatlon;
    // Getters 和 Setters
}

于此相同的是要在程序定義簡單規(guī)劃對象信息。這里不進行贅述。 當我們把按照映射關系創(chuàng)建好以上的映射對象后。就可以實現(xiàn)將xml數(shù)據(jù)轉換成json數(shù)據(jù)。來看一下具體的處理邏輯:

@Test
public void xml2JavaBean() {
	String origInfo = "113.216171,28.190967";//黃花國際機場
	String destInfo = "112.957124,28.198626";//橘子洲景區(qū)
	// style 默認0 (0:最快路線,1:最短路線,2:避開高速,3:步行)
	// 這里選擇避開高速
	String postStr = "%7B'orig':'" + origInfo + "','dest':'" + destInfo + "','style':'2'%7D" ;
	HttpResponse<String> resp = tdtOptService.drivePlan(postStr,"search",TDT_SERVER_KEY);
	try {
		System.out.println(resp.getBodyResult());
		JAXBContext context = JAXBContext.newInstance(TdtResult.class);
	    Unmarshaller unmarshaller = context.createUnmarshaller();
	    TdtResult result = (TdtResult) unmarshaller.unmarshal(new StringReader(resp.getBodyResult()));
	    System.out.println("距離: " + result.getDistance());
	    System.out.println("時長: " + result.getDuration());
	    System.out.println("起始點: " + result.getParameters().getOrig());
	    // 輸出其他需要的數(shù)據(jù)...
	    Gson gson = new Gson();
	    System.out.println("json格式化如下:");
	    System.out.println(gson.toJson(result));
	    System.out.println(result);
	} catch (JAXBException e) {
       e.printStackTrace();
    }
}

請注意,在上述的代碼中,我們首先創(chuàng)建了一個JAXBContext上下文對象,然后使用這個上下文對象創(chuàng)建Unmarshaller,最終進行xml向JSON的轉換。 

2、實現(xiàn)成果

經(jīng)過上面的開發(fā)和轉換,我們就可以將天地圖獲取的XML數(shù)據(jù)轉換成JSON,交作業(yè)的時候到了。一起來看一下轉換的結果和最終格式化之后的效果吧。

接下來對比一下xml格式的數(shù)據(jù)和json格式的數(shù)據(jù)有什么不同沒有,比如參數(shù)的映射有問題的,從其內容和具體的轉換指標的對比上來看下圖:

可以清楚的看到,經(jīng)過上面的轉換,基本已經(jīng)實現(xiàn)了將XML數(shù)據(jù)轉為JSON。

四、總結

本文即在這樣的背景下產(chǎn)生,博文首先對天地圖返回的XML信息元素進行詳細的介紹,包括其主要的子元素等方面,然后介紹在SpringBoot中使用JAXB實現(xiàn)對路徑規(guī)劃的對應的一一映射配置,最后完整的實現(xiàn)將天地圖的路徑規(guī)劃的XML數(shù)據(jù)轉為JSON格式。如果您當前也有業(yè)務是基于天地圖來構建,如果在構建相關服務的過程中也有需要將XML進行對應的處理,不妨來這里看看。

以上就是SpringBoot基于JAXB實現(xiàn)天地圖路徑規(guī)劃結果XML轉JSON的詳細內容,更多關于SpringBoot XML轉JSON的資料請關注腳本之家其它相關文章!

相關文章

  • Java責任鏈模式模板代碼分享

    Java責任鏈模式模板代碼分享

    這篇文章主要介紹了Java責任鏈模式模板代碼分享,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 基于SpringBoot和Vue實現(xiàn)頭像上傳與回顯功能

    基于SpringBoot和Vue實現(xiàn)頭像上傳與回顯功能

    在現(xiàn)代Web應用中,用戶個性化體驗尤為重要,其中頭像上傳與回顯是一個常見的功能需求,本文將詳細介紹如何使用Spring Boot和Vue.js構建一個前后端協(xié)同工作的頭像上傳系統(tǒng),并實現(xiàn)圖片的即時回顯,需要的朋友可以參考下
    2024-08-08
  • MyBatis學習教程(七)-Mybatis緩存介紹

    MyBatis學習教程(七)-Mybatis緩存介紹

    MyBatis緩存分為一級緩存和二級緩存一級緩存,本文給大家介紹mybatis緩存知識,非常不錯具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-05-05
  • SpringBoot使用JavaCV處理rtsp流的示例代碼

    SpringBoot使用JavaCV處理rtsp流的示例代碼

    這篇文章主要為大家詳細介紹了SpringBoot使用JavaCV處理rtsp流,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以跟隨小編一起了解一下
    2024-02-02
  • Java利用多線程模擬銀行系統(tǒng)存錢問題

    Java利用多線程模擬銀行系統(tǒng)存錢問題

    本文將利用Java多線程模擬銀行系統(tǒng)存錢問題:使用兩個不同的線程向同一個賬戶存錢。文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • SpringBoot獲取真實客戶端IP的正確方法

    SpringBoot獲取真實客戶端IP的正確方法

    在日常開發(fā)中,獲取客戶端IP看似簡單,實則暗藏玄機,很多開發(fā)者直接使用request.getRemoteAddr(),結果在生產(chǎn)環(huán)境中發(fā)現(xiàn)獲取到的都是負載均衡器的IP,而非真實用戶IP,本文將徹底揭秘Spring Boot中獲取真實客戶端IP的正確姿勢,需要的朋友可以參考下
    2026-03-03
  • 解決idea 項目編譯后沒有class文件的問題

    解決idea 項目編譯后沒有class文件的問題

    這篇文章主要介紹了解決idea 項目編譯后沒有class文件的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實用教程

    JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實用教程

    JDBC是Java連接數(shù)據(jù)庫的一種接口,它由各個數(shù)據(jù)庫廠商為開發(fā)者提供的接口,要使用它需要到相應廠商下載對應的jar包,下面這篇文章主要給大家介紹了關于JDBC用IDEA連接SQLServer數(shù)據(jù)庫的超實用教程,需要的朋友可以參考下
    2023-05-05
  • spring cloud-給Eureka Server加上安全的用戶認證詳解

    spring cloud-給Eureka Server加上安全的用戶認證詳解

    這篇文章主要介紹了spring cloud-給Eureka Server加上安全的用戶認證詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • SpringCloud Config配置中心原理以及環(huán)境切換方式

    SpringCloud Config配置中心原理以及環(huán)境切換方式

    這篇文章主要介紹了SpringCloud Config配置中心原理以及環(huán)境切換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論

苗栗县| 竹北市| 泸水县| 稷山县| 孟州市| 旬邑县| 绵竹市| 汝城县| 景宁| 芮城县| 徐水县| 武强县| 循化| 巴林右旗| 汤原县| 牡丹江市| 安达市| 屏东县| 普格县| 缙云县| 科技| 专栏| 南漳县| 双桥区| 张家口市| 大理市| 遂宁市| 杭锦旗| 文昌市| 山西省| 获嘉县| 敦煌市| 呼玛县| 封开县| 天峻县| 开阳县| 财经| 临邑县| 昌平区| 嘉定区| 怀集县|