亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java接收xml格式參數(shù)轉(zhuǎn)為json的方法

 更新時間:2024年11月12日 09:50:00   作者:yogima  
文章主要介紹了如何使用JAXB將XML格式的參數(shù)接收并轉(zhuǎn)換為Java實體類,然后將實體類轉(zhuǎn)換為JSON格式,文中提到在實體類中使用`@XmlElement`和`@JsonProperty`注解的重要性,以及如何處理復雜的XML結(jié)構(gòu)

1、定義實體類

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "User")
@Setter
@ToString
public class User {
    private String name;
    @XmlElement(name = "username")
    public String getName() {
        return name;
    }
}

注意這里需要把@XmlElement注解用在get方法上,實際使用時發(fā)現(xiàn)如果直接作用在字段上會報錯。

2、使用jaxb對接 轉(zhuǎn)為實體類

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
public User fromXml(String xmlData) throws Exception {
    JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    return (User) unmarshaller.unmarshal(new StringReader(xmlData));
}

這里的xmlData示例:<User><username>yogima<username></User>
就可以轉(zhuǎn)換到實體類對應(yīng)的字段中了

3、轉(zhuǎn)為json

import com.fasterxml.jackson.databind.ObjectMapper;
public String toJson(User user) throws Exception {
    ObjectMapper objectMapper = new ObjectMapper();
    return objectMapper.writeValueAsString(user);
}

實際上返回給前端的時候也不需要自己手動去writeValueAsString,這里只是做個示例。
上述轉(zhuǎn)為json后字段名使用的還是name,如果需要保持字段名為"username",只需要加上@JsonProperty。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.annotation.JsonProperty;
@XmlRootElement(name = "User")
@Setter
@ToString
public class User {
	@JsonProperty("username")
    private String name;
    @XmlElement(name = "username")
    public String getName() {
        return name;
    }
}

這樣看注解有時候還挺多此一舉的,直接User類中的字段用username就可以不需要注解;但是比如說返回的字段是<ABC_AA>12345</ABC_AA><AAA>111</AAA>,如果我不去規(guī)定@JsonProperty和@XmlElement,直接把字段定義成大寫的ABC_AA和AAA,也可以接收到xml參數(shù),但是不符合Java命名規(guī)范,而且會發(fā)現(xiàn)AAA默認轉(zhuǎn)出來的json字段叫做aaa,而ABC_AA轉(zhuǎn)出來則是abc_AA.所以我們還是加上注釋會更優(yōu)雅一些。

@JsonProperty("ABC_AA")
private String abcAa;
@XmlElement(name = "ABC_AA")
public String getAbcAa() {
    return abcAa;
}

4、返回的xml較為復雜,需要提取

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class XmlConvertTest {
    public static void main(String[] args) throws Exception{
    //模擬較為復雜的xml數(shù)據(jù)
    String xmlData = "<response><head><response_id>AA</response_id><status_code>200</status_code></head><result><![CDATA[<row><AAA>111</AAA><BBB>222</BBB></row><row><AAA>333</AAA><BBB>444</BBB></row>]]></result></response>";
    //使用正則取出需要的數(shù)據(jù)內(nèi)容 即<row><AAA>111</AAA><BBB>222</BBB></row><row><AAA>333</AAA><BBB>444</BBB></row>
    String cdataContent = xmlData.replaceAll("(?s).*?<result><!\\[CDATA\\[(.*?)]]></result>.*", "$1");
    // 如果需要提取head部分 即<response_id>AA</response_id><status_code>200</status_code>
    // String headContent = xmlData.replaceAll("(?s).*?<head>(.*?)</head>.*", "$1");
    //裹上rows
    String wrappedContent = "<rows>" + cdataContent + "</rows>";
    JAXBContext jaxbContext = JAXBContext.newInstance(XmlTestDTO.class);
    Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
    XmlTestDTO dto = (XmlTestDTO) unmarshaller.unmarshal(new StringReader(wrappedContent));
    System.out.println(dto);
}

對應(yīng)的XmlTestDTO:

@XmlRootElement(name = "rows")
@Setter
@ToString
public class XmlTestDTO {
	private List<XmlRowTest> rows = new ArrayList<>();
    @XmlElement(name = "row") // 對應(yīng)每個 <row> 元素
    public List<XmlRowTest> getRows() {
        return rows;
    }
    //XmlRowTest不需要作為根元素的話,這里可以不用@XmlRootElement注解
    //@XmlRootElement(name = "row")
	@Setter
	@ToString
    public static class XmlRowTest{
        @JsonProperty("AAA")
        private String aaa;
        @XmlElement(name = "AAA")
        public String getAaa() {
            return aaa;
        }
    }
}

拿到XmlTestDTO dto后只要使用dto.getRows()就能對List<XmlRowTest>進行遍歷了

到此這篇關(guān)于Java接收xml格式參數(shù)轉(zhuǎn)為json的文章就介紹到這了,更多相關(guān)java xml轉(zhuǎn)為json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot定時任務(wù)備份mysql數(shù)據(jù)庫的實現(xiàn)示例

    springboot定時任務(wù)備份mysql數(shù)據(jù)庫的實現(xiàn)示例

    為了防止數(shù)據(jù)庫被清庫或者誤刪數(shù)據(jù)庫的情況,所以需要定時將mysql數(shù)據(jù)庫中的數(shù)據(jù)進行備份,本文主要介紹了springboot定時任務(wù)備份mysql數(shù)據(jù)庫的實現(xiàn)示例,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • Java Bean與Map之間相互轉(zhuǎn)化的實現(xiàn)方法

    Java Bean與Map之間相互轉(zhuǎn)化的實現(xiàn)方法

    這篇文章主要介紹了Java Bean與Map之間相互轉(zhuǎn)化的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • java音樂播放器課程設(shè)計

    java音樂播放器課程設(shè)計

    這篇文章主要為大家詳細介紹了java音樂播放器的課程設(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • MVC頁面之間參數(shù)傳遞實現(xiàn)過程圖解

    MVC頁面之間參數(shù)傳遞實現(xiàn)過程圖解

    這篇文章主要介紹了MVC頁面之間參數(shù)傳遞實現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • ?java中Thread.sleep()的具體使用

    ?java中Thread.sleep()的具體使用

    本文主要介紹了?java中Thread.sleep()的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Java獲取HttpServletRequest的三種方法詳解

    Java獲取HttpServletRequest的三種方法詳解

    這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下
    2023-11-11
  • Java 中責任鏈模式實現(xiàn)的三種方式

    Java 中責任鏈模式實現(xiàn)的三種方式

    本文重點給大家介紹java中如何編寫責任鏈模式。主要從下面3個框架中的代碼中介紹。非常不錯,需要的朋友參考下吧
    2017-09-09
  • 將JavaDoc注釋生成API文檔的操作

    將JavaDoc注釋生成API文檔的操作

    這篇文章主要介紹了將JavaDoc注釋生成API文檔的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 深入了解JAVA 虛引用

    深入了解JAVA 虛引用

    這篇文章主要介紹了JAVA 虛引用的相關(guān)資料,幫助大家更好的理解和學習JAVA,感興趣的朋友可以了解下
    2020-08-08
  • mybatis-plus中配置日志信息方式

    mybatis-plus中配置日志信息方式

    這篇文章主要介紹了mybatis-plus中配置日志信息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03

最新評論