Java學(xué)習(xí)之如何進(jìn)行JSON解析
一. JSON簡介
1. 概念
JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,它算是JavaScript語言的一部分,與XML一樣都可以用于數(shù)據(jù)的存儲和傳輸。一個JSON文檔可以由JSON對象和JSON數(shù)組兩部分組成,內(nèi)部的格式由鍵值對組成。在實(shí)際應(yīng)用中,我們經(jīng)常會把JSON數(shù)組和JSON對象組合起來構(gòu)建成復(fù)雜的數(shù)據(jù)結(jié)構(gòu),以滿足不同的需求。
2. 優(yōu)缺點(diǎn)
JSON這種信息載體,相比XML來說,具有自己鮮明的特點(diǎn),具體來說,就是具有如下優(yōu)缺點(diǎn)。
2.1 JSON的優(yōu)點(diǎn)
- 易于讀寫:JSON的格式非常簡單,易于讀寫和維護(hù);
- 易于解析:JSON數(shù)據(jù)結(jié)構(gòu)簡單,解析速度快,可以很方便地被各種編程語言所解析;
- 易于傳輸:JSON數(shù)據(jù)量小,傳輸速度快,非常適合于網(wǎng)絡(luò)傳輸;
- 易于擴(kuò)展:JSON支持嵌套,可以很方便地添加新的數(shù)據(jù)結(jié)構(gòu);
- 與JavaScript兼容:JSON是JavaScript的一個子集,可以很方便地被JavaScript解析。
2.2 JSON的缺點(diǎn)
但是JSON也不是說就十全十美,同樣也有一些小缺點(diǎn)。
- 無注釋:JSON數(shù)據(jù)中不支持注釋,這使得JSON文件的可讀性變得較差;
- 無標(biāo)準(zhǔn):JSON沒有統(tǒng)一的標(biāo)準(zhǔn)定義,各種實(shí)現(xiàn)之間有一定的差異;
- 不支持二進(jìn)制數(shù)據(jù):JSON只支持文本數(shù)據(jù),不支持二進(jìn)制數(shù)據(jù),這在一些場景中可能會受到限制;
- 可讀性差:由于JSON的格式比較簡單,因此在一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中,可能會出現(xiàn)可讀性差的情況。
但總的來說,瑕不掩瑜,JSON作為一種非常方便、易于使用的數(shù)據(jù)格式,具有良好的跨平臺性和易擴(kuò)展性,常用于前后端數(shù)據(jù)交互、移動應(yīng)用開發(fā)、IoT應(yīng)用等場景中。
3. JSON與XML對比
正是基于以上特點(diǎn),所以在現(xiàn)代開發(fā)中,JSON比XML更常用。畢竟JSON具有更簡單、更清晰的語法和結(jié)構(gòu),同時也比XML更輕量級、更易于解析和處理。此外,JSON也更適合于Web應(yīng)用程序和移動應(yīng)用程序,因?yàn)樗梢愿斓卦诳蛻舳撕头?wù)器之間傳輸數(shù)據(jù)。當(dāng)然在某些特殊的應(yīng)用場景中,如數(shù)據(jù)交換和存儲等,XML仍然是一種重要的數(shù)據(jù)格式。請大家來看看做的JSON與XML對比總結(jié),如下表所示:
**** | JSON | XML |
---|---|---|
格式 | 輕量、易讀 | 冗長、復(fù)雜 |
數(shù)據(jù)類型 | 數(shù)組、對象、字符串、數(shù)字、布爾 | 數(shù)組、對象、字符串、數(shù)字、布爾 |
解析庫 | Jackson、Gson | DOM、SAX、JAXB |
可讀性 | 易于閱讀和理解 | 需要熟悉格式和標(biāo)簽 |
應(yīng)用場景 | 前后端數(shù)據(jù)交互、API數(shù)據(jù)傳輸 | 數(shù)據(jù)存儲、傳輸、配置 |
大家可以根據(jù)自己的實(shí)際需要,選擇合適的格式進(jìn)行數(shù)據(jù)的存儲和傳輸。
4. 使用場景
我們現(xiàn)在知道,JSON作為一種輕量級的數(shù)據(jù)交換格式,具有易讀性、易于編寫和解析的特點(diǎn),因此經(jīng)常用于前后端數(shù)據(jù)交互。具體來說,經(jīng)常會用于以下這些場景中:
- Web開發(fā)中,前后端數(shù)據(jù)交互。
- 移動應(yīng)用開發(fā)中,客戶端與服務(wù)器數(shù)據(jù)交互。
- IoT應(yīng)用中,設(shè)備與云端數(shù)據(jù)交互。
- 大數(shù)據(jù)應(yīng)用中,數(shù)據(jù)交換和存儲。
- 日志處理中,日志數(shù)據(jù)的存儲和分析。
- 軟件測試中,數(shù)據(jù)的生成和驗(yàn)證。
- 其他各種數(shù)據(jù)交換場景。
除了以上這些應(yīng)用之外,當(dāng)然還有很多其他的使用場景,在此就不再細(xì)說了。
二. JSON語法
1. 基本構(gòu)成
JSON文檔有 JSON對象和JSON數(shù)組 兩種基本類型, 這兩種基本類型又主要由以下幾個部分組成:
- 對象(Object) :由一組鍵值對組成,使用大括號({})包含,鍵值對之間使用逗號(,)分隔;
- 數(shù)組(Array) :由一組有序的值組成,使用中括號([])包含,值之間使用逗號(,)分隔;
- 值(Value) :由一組有序的值組成,使用中括號([])包含,值之間使用逗號(,)分隔;
- 鍵(Key) :一個字符串,用于表示對象中的一個鍵值對的鍵;
- 字符串(String) :由一組字符組成。在JSON中,字符串必須使用雙引號("")包含;
- 數(shù)字(Number) :一個整數(shù)或浮點(diǎn)數(shù);
- 布爾值(Boolean) :true或false;
- 空值(Null) :表示一個空值,只有一個關(guān)鍵字null。
其中,JSON對象要使用大括號{}
包裹起來,在大括號{}內(nèi)部可以包含多個鍵值對。每個鍵值對由一個鍵和一個值組成,鍵和值之間使用冒號:
分隔,而多個鍵值對之間要使用逗號,
分隔。鍵值對的鍵是一個字符串,值可以是任意類型的數(shù)據(jù),可以是數(shù)字、字符串、布爾值、數(shù)組或其他JSON對象。如下所示:
{ "name": "一一哥", "age": 25, "email": "yyg@example.com" }
上面的JSON對象有三個鍵值對,分別是name、age和email,它們的值分別是字符串、數(shù)字和字符串類型。
而JSON數(shù)組可以看作是一組有序的值,整個數(shù)組要使用中括號[]
包裹起來。在JSON數(shù)組中可以包裹其他的JSON對象或數(shù)組,進(jìn)行多重嵌套。數(shù)組中的每個值也都可以是任意類型的數(shù)據(jù)(包括字符串、數(shù)字、對象、數(shù)組等),值之間同樣使用逗號,
分隔。如下所示:
[ "apple", "banana", "cherry", { "name": "一一哥", "age": 30 }, [1, 2, 3] ]
上面的JSON數(shù)組有五個值,分別是三個字符串、一個對象和一個數(shù)組。其中,第四個值是一個JSON對象,第五個值是一個JSON數(shù)組。
雖然JSON對象和JSON數(shù)組在語法上有所不同,但它們都是用來表示JSON數(shù)據(jù)的常用結(jié)構(gòu)。在實(shí)際應(yīng)用中,我們可以將它們組合嵌套起來構(gòu)建出更加復(fù)雜的數(shù)據(jù)結(jié)構(gòu),以滿足不同的需求。比如下面這個JSON文檔:
{ "name": "一一哥", "age": 25, "email": "yyg@126.com", "hobbies": [ "吃飯飯", "音樂", { "name": "鋼琴", "level": 3 } ] }
在上面這個文檔中,定義了一個包含四個鍵值對的JSON對象,其中name、age和email是字符串類型的key。hobbies是一個包含三個元素的JSON數(shù)組,其中前兩個元素是字符串,第三個元素又是一個JSON對象,包含name和level兩個鍵值對。注意,在JSON數(shù)組中可以包含任意類型的元素,包括字符串、數(shù)字、對象、數(shù)組等。
為了讓大家更好地搞清楚JSON語法的構(gòu)成,接下來再分別給大家講解一下JSON語法中的各個組成部分。
2. 對象
JSON對象是一組由鍵值對組成的無序集合,用大括號{}
包裹。每個鍵值對之間使用逗號,
分隔。鍵是一個字符串,值可以是任意類型的數(shù)據(jù),包括對象、數(shù)組、字符串、數(shù)字、布爾值和空值。我們來看下面這個包含了三個鍵值對的JSON對象:
{ "name": "一一哥", "age": 20, "city": "上海" }
3. 數(shù)組
JSON數(shù)組是一組有序的值的集合,用中括號[]
包裹。每個值之間使用逗號,
分隔,值可以是任意類型的數(shù)據(jù),包括對象、數(shù)組、字符串、數(shù)字、布爾值和空值。我們來看下面這個包含了三個值的JSON數(shù)組:
["apple", "banana", "cherry"]
4. 值
JSON的值可以是任意類型的數(shù)據(jù),包括對象、數(shù)組、字符串、數(shù)字、布爾值和空值。例如:
{ "name": "一一哥", "age": 20, "isMarried": false, "hobbies": ["讀書", "運(yùn)動", "音樂"], "address": { "street": "上海同濟(jì)支路199號", "city": "上海", "zipcode": "10001" }, "phoneNumbers": [ { "type": "home", "number": "555-1234" }, { "type": "work", "number": "555-5678" } ] }
上面的JSON對象中包含了字符串、數(shù)字、布爾值、數(shù)組和對象等多種類型的值。
5. 鍵
JSON對象中的鍵必須是字符串類型,要用雙引號""
包裹。鍵應(yīng)該是唯一的,重復(fù)的鍵會被覆蓋。例如:
{ "name": "一一哥", "age": 30, "city": "上海" }
6. 字符串
JSON字符串是由雙引號""
包含的任意Unicode字符序列,字符串中可以包含轉(zhuǎn)義字符,如下表所示:
轉(zhuǎn)義字符 | 描述 |
---|---|
\" | 雙引號 |
\\ | 反斜杠 |
\/ | 正斜杠 |
\b | 退格符 |
\f | 換頁符 |
\n | 換行符 |
\r | 回車符 |
\t | 水平制表符(tab) |
\uXXXX | Unicode代碼(XXXX表示四位數(shù)字) |
例如:
{ "name": "一一哥", "city": "上海", "address": "123 Main Street\\nApt 4B" }
7. 數(shù)字
JSON中的數(shù)字可以是整數(shù)或浮點(diǎn)數(shù),可以帶正負(fù)號和小數(shù)點(diǎn)。例如:
{ "age": 30, "price": 12.99, "temperature": -5.6 }
8. 布爾值
JSON中的布爾值只有兩個取值,即true和false。例如:
{ "isMarried": true, "hasChildren": false }
9. 空值
JSON中的空值表示為null。例如:
{ "name": "一一哥", "address": null }
在JSON解析時,我們可以將null轉(zhuǎn)換為Java中的null值,表示缺少數(shù)據(jù)。
熟悉了JSON的基本語法之后,再來帶大家學(xué)習(xí)如何實(shí)現(xiàn)JSON解析,該部分的內(nèi)容主要包括將一個Java對象轉(zhuǎn)為JSON字符串,和把JSON字符串轉(zhuǎn)為對應(yīng)的Java對象。
三. JSON解析
1. 概述
我們先來看看什么是JSON解析。
JSON解析就是把使用JSON格式編寫的數(shù)據(jù),轉(zhuǎn)換為計算機(jī)程序可以使用的數(shù)據(jù)類型。在Java中,有許多JSON解析庫可供我們進(jìn)行使用,比如Jackson、FastJSON、Gso n等。接下來主要是結(jié)合Java推薦的Jackson來給大家介紹JSON解析的概念、原理和具體實(shí)現(xiàn)方法。
2. JSON解析原理
在我們開始進(jìn)行JSON解析之前,我們先來看看解析的實(shí)現(xiàn)原理。
JSON解析的實(shí)現(xiàn)原理其實(shí)就是將JSON字符串轉(zhuǎn)換為Java對象,或反過來將Java對象轉(zhuǎn)換為JSON字符串。其中,將Java對象轉(zhuǎn)換為JSON字符串的過程稱為序列化;反之,將JSON字符串轉(zhuǎn)換為Java對象的過程稱為反序列化。在Java中,我們通常是使用反射技術(shù)來實(shí)現(xiàn)JSON解析,即根據(jù)JSON字符串中的數(shù)據(jù)類型,利用Java的反射機(jī)制動態(tài)地創(chuàng)建出對應(yīng)的Java對象,并將JSON字符串中的數(shù)據(jù)賦值給Java對象的各個屬性。
3. Jackson簡介
3.1 概述
Jackson是一個流行的Java JSON解析庫,可以將JSON字符串轉(zhuǎn)換為Java對象,也可以將Java對象轉(zhuǎn)換為JSON字符串。它支持流式API、數(shù)據(jù)綁定和樹模型等多種解析方式,同時還給我們提供了許多注解,用于控制JSON序列化和反序列化。具有性能高、使用簡單等優(yōu)點(diǎn)。
3.2 常用API
我們在利用Jackson開發(fā)時,肯定會用到ObjectMapper類,該類是Jackson框架中最核心的類之一,它可以將Java對象轉(zhuǎn)換為JSON字符串,或反過來將JSON字符串轉(zhuǎn)換為Java對象。以下是ObjectMapper類的一些常用方法:
- readValue:將JSON字符串轉(zhuǎn)換為Java對象;
- writeValueAsString:將Java對象轉(zhuǎn)換為JSON字符串;
- writeValue:將Java對象寫入輸出流中。
這幾個方法需要大家牢牢記住,除此之外,Jackson中還有以下幾個常用的注解:
- @JsonProperty:用于在JSON屬性名和Java屬性名之間建立起映射關(guān)系;
- @JsonFormat:用于指定日期類型的格式;
- @JsonIgnore:用于指定某個屬性,不參與序列化和反序列化;
- @JsonInclude:用于指定某個屬性的條件序列化和反序列化。
3.3 核心依賴
由于Jackson并不是Java本身自帶的API,所以如果我們想在Java中使用Jackson,就需要導(dǎo)入相關(guān)的依賴。如果我們是在Maven項目中,可以通過如下坐標(biāo)導(dǎo)入依賴:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.12.3</version> </dependency>
其中,jackson-core和jackson-databind是Jackson最常用的模塊,里面包含了JSON序列化和反序列化的核心功能。我們還可以根據(jù)需要導(dǎo)入其他的Jackson模塊,如jackson-annotations等。因?yàn)槲覀儸F(xiàn)在還沒有學(xué)習(xí)Maven,所以只能手動導(dǎo)入相關(guān)的依賴了。在導(dǎo)入依賴之后,我們就可以開始使用Jackson進(jìn)行JSON解析了,請大家繼續(xù)往下看。
4. 序列化
我們在進(jìn)行前后端數(shù)據(jù)交互時,前端通常是使用JSON格式來傳遞數(shù)據(jù),后端則需要將這些JSON格式的數(shù)據(jù)轉(zhuǎn)換為Java對象進(jìn)行處理。同時,后端也需要將Java對象轉(zhuǎn)換為JSON格式,以便前端使用。所以前后端之間就需要進(jìn)行不同格式之間的轉(zhuǎn)換,這就是序列化和反序列化。在前面講過,序列化就是將Java對象轉(zhuǎn)換為JSON字符串的過程 。
4.1 對象轉(zhuǎn)字符串
我們先來看一個簡單的序列化代碼,將一個Java對象轉(zhuǎn)為json字符串,如下所示:
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author 一一哥Sun */ public class Demo01 { public static void main(String[] args) { try { //創(chuàng)建一個Person對象 Person person=new Person(); person.setName("一一哥"); person.setAge(20); person.setAddress("上海校區(qū)"); //創(chuàng)建一個ObjectMapper對象映射對象 ObjectMapper mapper = new ObjectMapper(); //序列化:將Java對象轉(zhuǎn)為json字符串 String json = mapper.writeValueAsString(person); System.out.println("json="+json); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
執(zhí)行結(jié)果如下圖所示:
4.2 集合轉(zhuǎn)字符串
除了可以將單個Java對象轉(zhuǎn)為JSON字符串之外,我們還可以將Java數(shù)組、集合等復(fù)雜對象類型轉(zhuǎn)為JSON字符串,實(shí)現(xiàn)Java對象與JSON數(shù)組之間的轉(zhuǎn)換。代碼如下所示:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author 一一哥Sun */ public class Demo03 { public static void main(String[] args) { try { //創(chuàng)建一個集合 Map<String,List<Person>> map=new HashMap<>(); List<Person> list=new ArrayList<>(); Person p1=new Person(); p1.setName("一一哥"); p1.setAge(20); p1.setAddress("山東"); Person p2=new Person(); p2.setName("壹哥"); p2.setAge(18); p2.setAddress("北京校區(qū)"); Person p3=new Person(); p3.setName("孫老師"); p3.setAge(30); p3.setAddress("青島校區(qū)"); list.add(p1); list.add(p2); list.add(p3); map.put("persons", list); //創(chuàng)建一個ObjectMapper對象映射對象 ObjectMapper mapper = new ObjectMapper(); //序列化:將Java對象轉(zhuǎn)為json字符串 String json = mapper.writeValueAsString(map); System.out.println("json="+json); } catch (JsonProcessingException e) { e.printStackTrace(); } } }
執(zhí)行結(jié)果如下圖所示:
5. 反序列化
5.1 字符串轉(zhuǎn)對象
而反序列化,就是將JSON字符串轉(zhuǎn)換為Java對象的過程。我們來看看如下代碼:
import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author 一一哥Sun */ public class Demo02 { public static void main(String[] args) { //先創(chuàng)建一個ObjectMapper對象映射對象 ObjectMapper mapper = new ObjectMapper(); //允許json字符串中有單引號,解決JsonParseException: //Unexpected character (''' (code 39)): was expecting double-quote to start field name mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); String jsonString = "{'name':'一一哥','age':18,'address':'上海'}"; try { //反序列化:將JSON字符串轉(zhuǎn)換為對應(yīng)的Java對象 Person person = mapper.readValue(jsonString, Person.class); System.out.println(person.getName()+"--"+person.getAge()+"--"+person.getAddress()); } catch (JsonProcessingException e) { //處理json處理異常 e.printStackTrace(); } } }
執(zhí)行結(jié)果如下圖所示:
在上面的案例中,我們首先創(chuàng)建了一個ObjectMapper對象,然后使用readValue方法將JSON字符串轉(zhuǎn)換為Person對象。Person類需要擁有對應(yīng)的屬性和getter/setter方法,最后輸出了person對象的name和age等屬性。
5.2 字符串轉(zhuǎn)集合
除了可以將JSON字符串轉(zhuǎn)為單個對象,我們也可以將一個復(fù)雜的JSON字符串轉(zhuǎn)為一個合適的集合對象類型。
import java.util.List; import java.util.Map; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; /** * @author 一一哥Sun */ public class Demo04 { public static void main(String[] args) { // 先創(chuàng)建一個ObjectMapper對象映射對象 ObjectMapper mapper = new ObjectMapper(); // 允許json字符串中有單引號,解決JsonParseException: // Unexpected character (''' (code 39)): was expecting double-quote to start // field name mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); String jsonString = "{'persons':[{'name':'一一哥','age':20,'address':'上海校區(qū)'},{'name':'壹哥','age':18,'address':'北京校區(qū)'}]}"; try { // 反序列化:將JSON字符串轉(zhuǎn)換為對應(yīng)的Java對象 //直接將json字符串轉(zhuǎn)為對應(yīng)的Java對象 Persons persons = mapper.readValue(jsonString, Persons.class); List<Person> list = persons.getPersons(); for (Person person : list) { System.out.println(person.getName() + "--" + person.getAge() + "--" + person.getAddress()); } // 也可以直接將json字符串轉(zhuǎn)為Map集合 Map<String, Person> map = mapper.readValue(jsonString, Map.class); for (Map.Entry<String, Person> entry : map.entrySet()) { System.out.println(entry.toString()); } } catch (JsonProcessingException e) { // 處理json處理異常 e.printStackTrace(); } } }
執(zhí)行結(jié)果如下圖所示:
在上面的案例中,我們創(chuàng)建了一個Persons類,內(nèi)部包含了一個包含Person對象的List列表。然后使用ObjectMapper對象將JSON字符串轉(zhuǎn)換為Person對象,最后遍歷PersonList中的每個Person對象,輸出其屬性值。這個案例中,JSON字符串中的name、age和address屬性,分別對應(yīng)了Person類中的name、age和address屬性。
我們就是通過以上這幾種方式,實(shí)現(xiàn)了Java對象與JSON字符串之間的轉(zhuǎn)換,你學(xué)會了嗎?
6. 注意事項
我們在進(jìn)行JSON解析時,需要注意以下幾個問題:
- JSON字符串必須是有效的JSON格式,否則會導(dǎo)致解析失敗;
- Java類中的屬性的名稱和類型,必須與JSON對象或JSON數(shù)組中的鍵和值相對應(yīng);
- JSON字符串中的鍵必須是字符串類型,用雙引號包裹;
- Java類中的屬性類型必須與JSON字符串中的值類型相對應(yīng);
- 使用Jackson進(jìn)行JSON解析時,需要將JSON字符串的Unicode轉(zhuǎn)義符進(jìn)行轉(zhuǎn)義,例如將"\"轉(zhuǎn)換為"\\";
- JSON字符串中的鍵必須是唯一的,重復(fù)的鍵會被覆蓋;
- JSON字符串中的數(shù)組必須使用中括號包裹,并使用逗號分隔數(shù)組元素。
以上這些注意事項,大家一定要認(rèn)真對待,否則可能會導(dǎo)致你出現(xiàn)一些莫名其妙的錯誤哦。
四. 結(jié)語
在本文給大家詳細(xì)介紹了JSON解析的概念、原理和使用方法,并以Jackson為例進(jìn)行了詳細(xì)的實(shí)現(xiàn)。希望大家熟練掌握J(rèn)SON解析,因?yàn)檫@個技術(shù)實(shí)在是太常用了哦。在實(shí)際開發(fā)中,我們要根據(jù)實(shí)際需求選擇合適的JSON解析方式,并根據(jù)具體的情況選擇相應(yīng)的注解,以便讓JSON解析更加得便捷和高效。
以上就是詳解如何使用Java進(jìn)行JSON解析的詳細(xì)內(nèi)容,更多關(guān)于Java進(jìn)行JSON解析的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringBoot整合第三方技術(shù)的實(shí)現(xiàn)
本文主要介紹了SpringBoot整合第三方技術(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02SpringBoot集成Kafka 配置工具類的詳細(xì)代碼
spring-kafka 是基于 java版的 kafka client與spring的集成,提供了 KafkaTemplate,封裝了各種方法,方便操作,它封裝了apache的kafka-client,不需要再導(dǎo)入client依賴,這篇文章主要介紹了SpringBoot集成Kafka 配置工具類,需要的朋友可以參考下2022-09-09Java關(guān)鍵字this(動力節(jié)點(diǎn)Java學(xué)院整理)
java中的this隨處可見,用法也多。通常情況下理解this關(guān)鍵字還是很容易的,但是在我初學(xué)的時候,有一個疑問卻一直不能很清晰的理解,現(xiàn)在慢慢的理解了,下面通過本文給大家記錄下,有需要的朋友參考下2017-03-03Java生成PDF文檔兩個超實(shí)用的庫( iText和Apache PDFBox)
這篇文章主要介紹了Java生成PDF文檔兩個超實(shí)用的庫,分別是用 iText庫以及用Apache PDFBox庫生成PDF,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02給Java菜鳥的一些建議_關(guān)于Java知識點(diǎn)歸納(J2EE and Web 部分)
下面小編就為大家?guī)硪黄oJava菜鳥的一些建議_關(guān)于Java知識點(diǎn)歸納(J2EE and Web 部分)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05