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

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

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

前言

目前常見的json解析工具有jackson、fastjson、gson。

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

Jackson相關(guān)注解

注解

說明

@JsonProperties

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

@JsonFormat

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

@JsonPropertyOrder

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

@JsonIgnore

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

@JacksonXmlProperty

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

@JacksonXmlRootElement

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

@JacksonXmlElementWrapper

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

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

引入jackson相關(guā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ù)綁定包,提供基于"對象綁定" 解析的相關(guān) API ( ObjectMapper ) 和"樹模型" 解析的相關(guān) API-->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
<!--日期類型序列化包-->
<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實體類:

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

測試代碼:

/**
 * @author 秋一葉
 * @create 2024-04-23 21:00
 * json字符串和對象、集合、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 {
            //對象轉(zhuǎn)json字符串
            String jsonString = objectMapper.writeValueAsString(employees1);
            //json字符串轉(zhuǎn)為對象
            Employees emp1 = objectMapper.readValue(jsonString, Employees.class);
            System.out.println("json字符串:" + jsonString);
            System.out.println("對象1:" + emp1);

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

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

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

            //對象寫為字節(jié)流
            byte[] bytes = objectMapper.writeValueAsBytes(employees1);
            //字節(jié)流轉(zhuǎn)為對象
            Employees emp3 = objectMapper.readValue(bytes, Employees.class);
            System.out.println("對象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":"男"}
對象1:Employees(name=秋一葉, age=18, sex=男)
====================================================
對象2:Employees(name=秋一葉, age=18, sex=男)
====================================================
對象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和對象互轉(zhuǎn)

Department實體:

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

測試代碼:

public class Demo1 {
    public static void main(String[] args) {
        XmlMapper xmlMapper = new XmlMapper();
        //字段為null,自動忽略,不再序列化
        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ā)部門");
        department.setEmployees(Lists.newArrayList(employees1, employees2));

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

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

打印結(jié)果:

返回的xml:<RootName><DepName>產(chǎn)品研發(fā)部門</DepName><EmpMessage><EmpName><name>秋一葉</name><age>18</age><sex>男</sex></EmpName><EmpName><name>小王</name><age>20</age><sex>男</sex></EmpName></EmpMessage></RootName>
返回的實體:Department(depName=產(chǎn)品研發(fā)部門, 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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

    JavaWeb入門:ServletContext詳解和應用

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

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

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

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

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

    Java簡單冒泡排序示例解析

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

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

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

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

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

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

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

    詳解MySQL的簡易封裝以及使用

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

    Mybatis結(jié)果集自動映射的實例代碼

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

最新評論