欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

1、返回xml梳理

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

完整的XML響應內容如下:

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

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

2、返回xml實例

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

按照前面內容展示信息,我們以簡化后的路徑規(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數據,而不需要編寫特定的XML解析代碼。‌

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

2、JAXB能做什么

JAXB的應用場景

‌Web服務‌:在Web服務中,JAXB可以將Java對象序列化為XML文檔,以便在不同系統(tǒng)之間進行數據交換。‌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實現轉換

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

1、詳細實現過程

由于JAXB是JDK默認的一種實現,因此在我們的工程中無需刻意的引入,直接在代碼中使用相關的類即可。為了將XML中的每個屬性和子元素都有對應的對象和屬性來進行綁定。我們將根據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
}

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

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)建好以上的映射對象后。就可以實現將xml數據轉換成json數據。來看一下具體的處理邏輯:

@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());
	    // 輸出其他需要的數據...
	    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、實現成果

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

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

可以清楚的看到,經過上面的轉換,基本已經實現了將XML數據轉為JSON。

四、總結

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

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

相關文章

最新評論