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

Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換

 更新時(shí)間:2024年05月18日 09:36:34   作者:秋一葉葉  
Jackson是一個(gè)強(qiáng)大工具,可用于Json、XML、實(shí)體之間的相互轉(zhuǎn)換,JacksonXmlElementWrapper用于指定List等集合類(lèi),外圍標(biāo)簽名,JacksonXmlProperty指定包裝標(biāo)簽名,或者指定標(biāo)簽內(nèi)部屬性名,JacksonXmlRootElement指定生成xml根標(biāo)簽的名字,JacksonXmlText指定當(dāng)前這個(gè)值

前言

目前常見(jiàn)的json解析工具有jackson、fastjson、gson。

  • jackson是Spring mvc內(nèi)置的json轉(zhuǎn)換工具;
  • fastjson是阿里的開(kāi)源JSON解析庫(kù),由于fastjson經(jīng)常會(huì)出現(xiàn)漏洞,暫不考慮;
  • Jackson是一個(gè)強(qiáng)大工具,可用于Json、XML、實(shí)體之間的相互轉(zhuǎn)換。

Jackson相關(guān)注解

注解

說(shuō)明

@JsonProperties

把屬性的名稱(chēng)序列化時(shí)轉(zhuǎn)換為另外一個(gè)名稱(chēng) ;@JsonProperty(“DepName”)

@JsonFormat

把屬性的格式序列化時(shí)轉(zhuǎn)換成指定的格式;@JsonFormat(pattern = “yyyy-MM-dd”)

@JsonPropertyOrder

指定屬性在序列化時(shí) json 中的順序;@JsonPropertyOrder({ “age”, “name” })

@JsonIgnore

排除指定屬性不被json序列化

@JacksonXmlProperty

指定XML命名空間的名稱(chēng);@JacksonXmlProperty(localName = “DepName”)

@JacksonXmlRootElement

指定XML根元素命名空間的名稱(chēng);@JacksonXmlRootElement(localName = “RootName”)

@JacksonXmlElementWrapper

可用于指定List等集合類(lèi),外圍標(biāo)簽名;@JacksonXmlElementWrapper(localName = “EmpMessage”)

1、對(duì)象和json互轉(zhuǎn)

引入jackson相關(guān)依賴(lài):

<!--注解包,提供標(biāo)準(zhǔn)注解功能-->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
</dependency>
<!--核心包,提供基于"流模式"解析的相關(guān) API-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
</dependency>
<!--數(shù)據(jù)綁定包,提供基于"對(duì)象綁定" 解析的相關(guān) API ( ObjectMapper ) 和"樹(shù)模型" 解析的相關(guān) API-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<!--日期類(lèi)型序列化包-->
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<!--引入xml功能-->
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

Employees實(shí)體類(lèi):

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employees {
    private String name;
    private Integer age;
    private String sex;
}

測(cè)試代碼:

/**
 * @author 秋一葉
 * @create 2024-04-23 21:00
 * json字符串和對(duì)象、集合、map互轉(zhuǎn)
 *
 */
public class Demo2 {
    public static void main(String[] args) {
   		ObjectMapper objectMapper = new ObjectMapper();
        Employees employees1 = new Employees("秋一葉",18,"男");
        Employees employees2 = new Employees("小王",20,"男");
        
        try {
            //對(duì)象轉(zhuǎn)json字符串
            String jsonString = objectMapper.writeValueAsString(employees1);
            //json字符串轉(zhuǎn)為對(duì)象
            Employees emp1 = objectMapper.readValue(jsonString, Employees.class);
            System.out.println("json字符串:" + jsonString);
            System.out.println("對(duì)象1:" + emp1);

            System.out.println("====================================================");

            //對(duì)象轉(zhuǎn)為json字符串寫(xiě)入文件
            objectMapper.writeValue(new File("emp.json"), employees1);
            //從文件中讀取json字符串轉(zhuǎn)為對(duì)象
            Employees emp2 = objectMapper.readValue(new File("emp.json"), Employees.class);
            System.out.println("對(duì)象2:" + emp2);

            System.out.println("====================================================");

            //對(duì)象寫(xiě)為字節(jié)流
            byte[] bytes = objectMapper.writeValueAsBytes(employees1);
            //字節(jié)流轉(zhuǎn)為對(duì)象
            Employees emp3 = objectMapper.readValue(bytes, Employees.class);
            System.out.println("對(duì)象3:" + emp3);

            System.out.println();
            System.out.println("*****************************************************");
            System.out.println();


            //Map和json互轉(zhuǎn)
            Map<String, Object> map = Maps.newHashMap();
            map.put("001", employees1);
            map.put("002", "元旦");
            String mapToString = objectMapper.writeValueAsString(map);
            Map<String, Object> stringToMap = objectMapper.readValue(mapToString, new TypeReference<Map<String, Object>>() {
            });
            System.out.println("json字符串:" + mapToString);
            System.out.println("map:" + stringToMap);

            System.out.println("====================================================");

            //List和json互轉(zhuǎn)
            List<Employees> empList = Lists.newArrayList(employees1, employees2);
            String jsonList = objectMapper.writeValueAsString(empList);
            List<Employees> stringToList = objectMapper.readValue(jsonList, new TypeReference<List<Employees>>() {
            });
            System.out.println("json字符串:" + jsonList);
            System.out.println("map:" + stringToList);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

打印結(jié)果:

json字符串:{"name":"秋一葉","age":18,"sex":"男"}
對(duì)象1:Employees(name=秋一葉, age=18, sex=男)
====================================================
對(duì)象2:Employees(name=秋一葉, age=18, sex=男)
====================================================
對(duì)象3:Employees(name=秋一葉, age=18, sex=男)

*****************************************************

json字符串:{"001":{"name":"秋一葉","age":18,"sex":"男"},"002":"元旦"}
map:{001={name=秋一葉, age=18, sex=男}, 002=元旦}
====================================================
json字符串:[{"name":"秋一葉","age":18,"sex":"男"},{"name":"小王","age":20,"sex":"男"}]
map:[Employees(name=秋一葉, age=18, sex=男), Employees(name=小王, age=20, sex=男)]

2、XML和對(duì)象互轉(zhuǎn)

Department實(shí)體:

@Data
@JacksonXmlRootElement(localName = "RootName")
public class Department {
    @JacksonXmlProperty(localName = "DepName")
    private String depName;
    
    @JacksonXmlElementWrapper(localName = "EmpMessage")
    @JacksonXmlProperty(localName = "EmpName")
    List<Employees> employees; 
}

測(cè)試代碼:

public class Demo1 {
    public static void main(String[] args) {
        XmlMapper xmlMapper = new XmlMapper();
        //字段為null,自動(dòng)忽略,不再序列化
        xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

        Department department = new Department();
        Employees employees1 = new Employees("秋一葉",18,"男");
        Employees employees2 = new Employees("小王",20,"男");
        department.setDepName("產(chǎn)品研發(fā)部門(mén)");
        department.setEmployees(Lists.newArrayList(employees1, employees2));

        try {
            //對(duì)象轉(zhuǎn)xml
            String xml = xmlMapper.writeValueAsString(department);
            //xml轉(zhuǎn)對(duì)象
            Department dep = xmlMapper.readValue(xml, Department.class);

            System.out.println("返回的xml:" + xml);
            System.out.println("返回的實(shí)體:" + dep);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
    }
}

打印結(jié)果:

返回的xml:<RootName><DepName>產(chǎn)品研發(fā)部門(mén)</DepName><EmpMessage><EmpName><name>秋一葉</name><age>18</age><sex>男</sex></EmpName><EmpName><name>小王</name><age>20</age><sex>男</sex></EmpName></EmpMessage></RootName>
返回的實(shí)體:Department(depName=產(chǎn)品研發(fā)部門(mén), employees=[Employees(name=秋一葉, age=18, sex=男), Employees(name=小王, age=20, sex=男)])

Jackson使用示例-Bean、XML、Json互轉(zhuǎn)_jackson

到此這篇關(guān)于Jackson使用示例-Bean、XML、Json之間相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Jackson使Bean、XML、Json互換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot靜態(tài)資源及原理解析

    SpringBoot靜態(tài)資源及原理解析

    這篇文章主要介紹了SpringBoot靜態(tài)資源及原理解析,當(dāng)創(chuàng)建一個(gè)jar工程時(shí),想引入css等靜態(tài)資源時(shí),需要遵守SpringBoot的靜態(tài)資源映射關(guān)系,通過(guò)WebMvcAutoConfiguration查看靜態(tài)配置資源的規(guī)則,需要的朋友可以參考下
    2023-12-12
  • JavaWeb入門(mén):ServletContext詳解和應(yīng)用

    JavaWeb入門(mén):ServletContext詳解和應(yīng)用

    這篇文章主要介紹了Java ServletContext對(duì)象用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求

    JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求

    本文主要介紹了JAVA8發(fā)送帶有Body的HTTP GET請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理詳解

    Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理詳解

    AOP是面向切面編程的技術(shù),AOP基于IoC基礎(chǔ),是對(duì)OOP的有益補(bǔ)充,流行的AOP框架有Sping AOP、AspectJ,這篇文章主要給大家介紹了關(guān)于Spring中AOP概念與兩種動(dòng)態(tài)代理模式原理的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • Java簡(jiǎn)單冒泡排序示例解析

    Java簡(jiǎn)單冒泡排序示例解析

    這篇文章主要介紹了Java簡(jiǎn)單冒泡排序示例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Java中args參數(shù)數(shù)組的用法說(shuō)明

    Java中args參數(shù)數(shù)組的用法說(shuō)明

    這篇文章主要介紹了Java中args參數(shù)數(shù)組的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • 淺談Java安全之C3P0鏈利用與分析

    淺談Java安全之C3P0鏈利用與分析

    本文主要介紹了淺談Java安全之C3P0鏈利用與分析,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 集成Spring Redis緩存的實(shí)現(xiàn)

    集成Spring Redis緩存的實(shí)現(xiàn)

    今天小編就為大家分享一篇關(guān)于集成Spring Redis緩存的實(shí)現(xiàn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 詳解MySQL的簡(jiǎn)易封裝以及使用

    詳解MySQL的簡(jiǎn)易封裝以及使用

    本文主要介紹了MySQL的簡(jiǎn)易封裝以及使用。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Mybatis結(jié)果集自動(dòng)映射的實(shí)例代碼

    Mybatis結(jié)果集自動(dòng)映射的實(shí)例代碼

    在使用Mybatis時(shí),有的時(shí)候我們可以不用定義resultMap,而是直接在<select>語(yǔ)句上指定resultType。這個(gè)時(shí)候其實(shí)就用到了Mybatis的結(jié)果集自動(dòng)映射,下面通過(guò)本文給大家分享Mybatis結(jié)果集自動(dòng)映射的實(shí)例代碼,一起看看吧
    2017-02-02

最新評(píng)論