最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java JSON提取工具JsonExtractor的使用

 更新時間:2023年05月19日 16:34:49   作者:樂征skyline  
本文主要介紹了Java JSON提取工具JsonExtractor的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. 問題場景

Java處理JSON數(shù)據(jù)通常的做法就是通過第三方庫將其轉換為一個Java類的對象,但是這樣會導致產(chǎn)生很多跟產(chǎn)品業(yè)務無關的臨時類。在JavaScript中,則可以直接提取,例如obj.user.name,非常方便。但是在Java中,如果不轉換為類的對象,就得小心翼翼地編寫像下面這樣的代碼:

try {
    JsonElement element = JsonParser.parseString(jsonStr);
    if (element.isJsonObject()) {
        JsonObject userJson = element.getAsJsonObject().getAsJsonObject("user");
        if (userJson != null) {
            JsonPrimitive nameJson = userJson.getAsJsonPrimitive("name");
            if (nameJson != null && nameJson.isString()) {
                String name = nameJson.getAsString();
            }
        }
    }
} catch (JsonParseException e) {
    e.printStackTrace();
}

這樣的方式非常繁瑣,而且里面充滿防御性的代碼,顯得羅嗦,關鍵信息其實只有jsonStr.user.name這樣。而本文要介紹的就是不將JSON數(shù)據(jù)轉換為某個 Java Bean 對象來提取JSON數(shù)據(jù)內容的一個工具類--JsonExtractor。

2. 功能介紹

這個類比較簡單,但是方法不少,因此我將這個類里的方法分為兩類來講

2.1 構建方法

如名,用于構建JsonExtractor的方法,這里不推薦直接調用構造方法,而是以下幾個方法來構建

  • 靜態(tài)方法Builder from(String json):這個方法是整個過程的開始,傳入?yún)?shù)為需要解析的JSON字符串,返回的對象是用于構建JsonExtractor的建造者。
  • 建造者方法JsonExtractor<Integer, JsonArray> forJsonArray():這個方法指定要處理的JSON數(shù)組是數(shù)組類型,返回對應的處理JSON數(shù)組的提取器。
  • 建造者方法JsonExtractor<Void, JsonNull> forNull():這個方法指定要處理的JSON數(shù)據(jù)是null,基本不用。
  • 建造者方法JsonExtractor<Void, JsonPrimitive> forPrimitive():這個方法指定要處理的JSON數(shù)據(jù)是原始類型(例如,int、String等等),返回處理原始類型的提取器。
  • 建造者方法JsonExtractor<String, JsonObject> forJsonObject():這個方法指定要處理的JSON數(shù)據(jù)是JSON對象,返回處理JSON對象的提取器,比較常用。

2.2 提取方法

這些方法的參數(shù)根據(jù)JsonExtractor的泛型K決定,如果當前對象為數(shù)組,則K為Integer,表示數(shù)組的索引;如果是對象,則K為String,表示屬性對應的鍵值;如果是原始類型或null,由于沒有下一級屬性或內容,因此為Void。

  • JsonArray getArray(K key):提取對應鍵值的屬性為數(shù)組。
  • Optional<JsonArray> optArray(K key):getArray的Optional版本。
  • int getInt(K key):提取對應鍵值的屬性為int,沒有則返回0。
  • Optional<Integer> optInt(K key):getInt的Optional版本。
  • boolean getBool(K key):提取對應鍵值的屬性為boolean,沒有則返回false。
  • Optional<Boolean> optBool(K key):getBool的Optional版本。
  • long getLong(K key):提取對應鍵值的屬性為long,沒有則返回0。
  • Optional<Long> optLong(K key):getLong的Optional版本。
  • String getString(K key):提取對應鍵值的屬性為字符串,沒有則返回空字符串。
  • Optional<String> optString(K key):getString的Optional版本。
  • JsonElement get(K key)和<T> T get(K key, Class<T> typeClass):提取指定鍵值的屬性為JsonElement或指定Java類型。
  • Optional<JsonElement> opt(K key)和<T> Optional<T> opt(K key, Class<T> typeClass):get的Optional版本。
  • Builder into(K key):對指定鍵值的屬性進行下一步提取,用于像data.user.name這樣的多級提取。
  • void forEach(BiConsumer<K, JsonElement> entryConsumer):對JSON數(shù)據(jù)的內容進行遍歷。

3. 使用示例

例如,我們要提取的json如下:

{
  "id": 1,
  "name": "Li Lei",
  "pet": {
    "name": "huahua",
    "type": "dog",
    "id": 11
  },
  "live": true,
  "age": 20,
  "friends": [
    "James",
    "Andy",
    "Tom"
  ]
}

對應的 Java Bean 如下:

class Pet {
? ? private String name;
? ? private String type;
? ? private long id;
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
? ? public String getType() {
? ? ? ? return type;
? ? }
? ? public void setType(String type) {
? ? ? ? this.type = type;
? ? }
? ? public long getId() {
? ? ? ? return id;
? ? }
? ? public void setId(long id) {
? ? ? ? this.id = id;
? ? }
}
class User {
? ? private long id;
? ? private String name;
? ? private Pet pet;
? ? private boolean live;
? ? private int age;
? ? private String[] friends;
? ? public String[] getFriends() {
? ? ? ? return friends;
? ? }
? ? public void setFriends(String[] friends) {
? ? ? ? this.friends = friends;
? ? }
? ? public boolean isLive() {
? ? ? ? return live;
? ? }
? ? public void setLive(boolean live) {
? ? ? ? this.live = live;
? ? }
? ? public int getAge() {
? ? ? ? return age;
? ? }
? ? public void setAge(int age) {
? ? ? ? this.age = age;
? ? }
? ? public Pet getPet() {
? ? ? ? return pet;
? ? }
? ? public void setPet(Pet pet) {
? ? ? ? this.pet = pet;
? ? }
? ? public long getId() {
? ? ? ? return id;
? ? }
? ? public void setId(long id) {
? ? ? ? this.id = id;
? ? }
? ? public String getName() {
? ? ? ? return name;
? ? }
? ? public void setName(String name) {
? ? ? ? this.name = name;
? ? }
}

那么提取代碼就是:

String json = "{\"id\":1,\"name\":\"Li Lei\",\"pet\":{\"name\":\"huahua\",\"type\":\"dog\",\"id\":11},\"live\":true,\"age\":20,\"friends\":[\"James\",\"Andy\",\"Tom\"]}";
JsonExtractor<String, JsonObject> extractor = JsonExtractor.from(json).forJsonObject();
//直接獲取屬性
long id = extractor.getLong("id");
//按Optional風格獲取基本類型的屬性
extractor.optString("name").ifPresent((String name) -> {
? ? System.out.println("name:" + name);
});
extractor.optString("name").ifPresent(System.out::println);
//按Optional風格獲取屬性并手動轉換為指定類
extractor.opt("pet").ifPresent((JsonElement element) -> {
? ? System.out.println("pet json:" + element);
? ? Pet pet = new Gson().fromJson(element, Pet.class);
? ? System.out.println("pet bean 1:" + pet.getName());
});
//按Optional風格獲取屬性自動轉換為指定類
extractor.opt("pet", Pet.class).ifPresent((Pet pet) -> {
? ? System.out.println("pet bean 2:" + pet.getName());
});
//直接將屬性提取為指定類型
Pet pet = extractor.get("pet", Pet.class);
//提取多級字段,類似js的 user.pet.name 這樣的風格
extractor.into("pet").forJsonObject()
? ? ? ? .optString("name").ifPresent((String name) -> {
? ? ? ? ? ? System.out.println("pet.name:" + name);
? ? ? ? });
//提取并遍歷數(shù)組
extractor.into("friends").forJsonArray()
? ? ? ? .forEach((Integer index, JsonElement element) -> {
? ? ? ? ? ? System.out.println(index + ":" + element.getAsString());
? ? ? ? });

4. 完整實現(xiàn)

import com.google.gson.*;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
public abstract class JsonExtractor<K, V> {
? ? private static final Gson gson = new Gson();
? ? protected V jsonElement;
? ? JsonExtractor(V jsonElement) {
? ? ? ? this.jsonElement = jsonElement;
? ? }
? ? public V getJsonElement() {
? ? ? ? return jsonElement;
? ? }
? ? public static class Builder {
? ? ? ? private JsonElement element;
? ? ? ? protected Builder() {
? ? ? ? }
? ? ? ? public Builder(JsonElement element) {
? ? ? ? ? ? this.element = element;
? ? ? ? }
? ? ? ? public JsonExtractor<Void, JsonNull> forNull() {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return new NullExtractor(element.getAsJsonNull());
? ? ? ? ? ? } catch (RuntimeException e) {
? ? ? ? ? ? ? ? return new ErrorExtractor<>(e);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public JsonExtractor<Void, JsonPrimitive> forPrimitive() {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return new PrimitiveExtractor(element.getAsJsonPrimitive());
? ? ? ? ? ? } catch (RuntimeException e) {
? ? ? ? ? ? ? ? return new ErrorExtractor<>(e);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public JsonExtractor<String, JsonObject> forJsonObject() {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return new ObjectExtractor(element.getAsJsonObject());
? ? ? ? ? ? } catch (RuntimeException e) {
? ? ? ? ? ? ? ? return new ErrorExtractor<>(e);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public JsonExtractor<Integer, JsonArray> forJsonArray() {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return new ArrayExtractor(element.getAsJsonArray());
? ? ? ? ? ? } catch (RuntimeException e) {
? ? ? ? ? ? ? ? return new ErrorExtractor<>(e);
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private static class ErrorBuilder extends Builder {
? ? ? ? private final Exception exception;
? ? ? ? public ErrorBuilder(Exception exception) {
? ? ? ? ? ? this.exception = exception;
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonExtractor<Integer, JsonArray> forJsonArray() {
? ? ? ? ? ? return new ErrorExtractor<>(exception);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonExtractor<Void, JsonNull> forNull() {
? ? ? ? ? ? return new ErrorExtractor<>(exception);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonExtractor<Void, JsonPrimitive> forPrimitive() {
? ? ? ? ? ? return new ErrorExtractor<>(exception);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonExtractor<String, JsonObject> forJsonObject() {
? ? ? ? ? ? return new ErrorExtractor<>(exception);
? ? ? ? }
? ? }
? ? public static Builder from(String json) {
? ? ? ? try {
? ? ? ? ? ? return new Builder(JsonParser.parseString(json));
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? return new ErrorBuilder(e);
? ? ? ? }
? ? }
? ? public Builder into(K key) {
? ? ? ? return new ErrorBuilder(new RuntimeException("not implements!"));
? ? }
? ? public Optional<JsonElement> opt(K key) {
? ? ? ? return Optional.ofNullable(get(key));
? ? }
? ? public <T> Optional<T> opt(K key, Class<T> typeClass) {
? ? ? ? return Optional.empty();
? ? }
? ? public JsonElement get(K key) {
? ? ? ? return null;
? ? }
? ? public <T> T get(K key, Class<T> typeClass) {
? ? ? ? return opt(key, typeClass).orElse(null);
? ? }
? ? public JsonArray getArray(K key) {
? ? ? ? return null;
? ? }
? ? public Optional<JsonArray> optArray(K key) {
? ? ? ? return Optional.ofNullable(getArray(key));
? ? }
? ? public int getInt(K key) {
? ? ? ? return optInt(key).orElse(0);
? ? }
? ? public Optional<Integer> optInt(K key) {
? ? ? ? return Optional.empty();
? ? }
? ? public double getDouble(K key) {
? ? ? ? return optDouble(key).orElse(0d);
? ? }
? ? public Optional<Double> optDouble(K key) {
? ? ? ? return Optional.empty();
? ? }
? ? public boolean getBool(K key) {
? ? ? ? return optBool(key).orElse(false);
? ? }
? ? public Optional<Boolean> optBool(K key) {
? ? ? ? return Optional.empty();
? ? }
? ? public long getLong(K key) {
? ? ? ? return optLong(key).orElse(0L);
? ? }
? ? public Optional<Long> optLong(K key) {
? ? ? ? return Optional.empty();
? ? }
? ? public String getString(K key) {
? ? ? ? return optString(key).orElse("");
? ? }
? ? public Optional<String> optString(K key) {
? ? ? ? return Optional.empty();
? ? }
? ? public void forEach(BiConsumer<K, JsonElement> entryConsumer) {
? ? }
? ? private static class ObjectExtractor extends JsonExtractor<String, JsonObject> {
? ? ? ? private ObjectExtractor(JsonObject jsonObject) {
? ? ? ? ? ? super(jsonObject);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Builder into(String key) {
? ? ? ? ? ? JsonElement element = this.jsonElement.get(key);
? ? ? ? ? ? return element == null ? new Builder(JsonNull.INSTANCE) : new Builder(element);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonElement get(String key) {
? ? ? ? ? ? return this.jsonElement.getAsJsonObject(key);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<JsonArray> optArray(String key) {
? ? ? ? ? ? return Optional.ofNullable(this.jsonElement.getAsJsonArray(key));
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Integer> optInt(String key) {
? ? ? ? ? ? return Optional.ofNullable(this.jsonElement.getAsJsonPrimitive(key)).map(JsonPrimitive::getAsInt);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Double> optDouble(String key) {
? ? ? ? ? ? return Optional.ofNullable(jsonElement.getAsJsonPrimitive(key)).map(JsonPrimitive::getAsDouble);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Boolean> optBool(String key) {
? ? ? ? ? ? return Optional.ofNullable(jsonElement.getAsJsonPrimitive(key)).map(JsonPrimitive::getAsBoolean);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Long> optLong(String key) {
? ? ? ? ? ? return Optional.ofNullable(jsonElement.getAsJsonPrimitive(key)).map(JsonPrimitive::getAsLong);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<String> optString(String key) {
? ? ? ? ? ? return Optional.ofNullable(jsonElement.getAsJsonPrimitive(key)).map(JsonPrimitive::getAsString);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public <T> Optional<T> opt(String key, Class<T> typeClass) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(jsonElement.get(key)).map(e -> gson.fromJson(e, typeClass));
? ? ? ? ? ? } catch (JsonSyntaxException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public void forEach(BiConsumer<String, JsonElement> entryConsumer) {
? ? ? ? ? ? Set<Map.Entry<String, JsonElement>> entrySet = jsonElement.entrySet();
? ? ? ? ? ? for (Map.Entry<String, JsonElement> entry : entrySet) {
? ? ? ? ? ? ? ? entryConsumer.accept(entry.getKey(), entry.getValue());
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private static class ArrayExtractor extends JsonExtractor<Integer, JsonArray> {
? ? ? ? private ArrayExtractor(JsonArray array) {
? ? ? ? ? ? super(array);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Builder into(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return new Builder(getJsonElement().get(index));
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return new ErrorBuilder(e);
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public JsonElement get(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return getJsonElement().get(index);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return null;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<JsonArray> optArray(Integer index) {
? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsJsonArray);
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Integer> optInt(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsInt);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Double> optDouble(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsDouble);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Boolean> optBool(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsBoolean);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<Long> optLong(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsLong);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Optional<String> optString(Integer index) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(JsonElement::getAsString);
? ? ? ? ? ? } catch (IndexOutOfBoundsException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public <T> Optional<T> opt(Integer index, Class<T> typeClass) {
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? return Optional.ofNullable(getJsonElement().get(index)).map(e -> gson.fromJson(e, typeClass));
? ? ? ? ? ? } catch (JsonSyntaxException e) {
? ? ? ? ? ? ? ? return Optional.empty();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? @Override
? ? ? ? public void forEach(BiConsumer<Integer, JsonElement> entryConsumer) {
? ? ? ? ? ? for (int i = 0; i < getJsonElement().size(); i++) {
? ? ? ? ? ? ? ? entryConsumer.accept(i, getJsonElement().get(i));
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? private static class NullExtractor extends JsonExtractor<Void, JsonNull> {
? ? ? ? NullExtractor(JsonNull jsonElement) {
? ? ? ? ? ? super(jsonElement);
? ? ? ? }
? ? }
? ? private static class PrimitiveExtractor extends JsonExtractor<Void, JsonPrimitive> {
? ? ? ? PrimitiveExtractor(JsonPrimitive jsonElement) {
? ? ? ? ? ? super(jsonElement);
? ? ? ? }
? ? }
? ? private static class ErrorExtractor<K, V> extends JsonExtractor<K, V> {
? ? ? ? private final Exception exception;
? ? ? ? private ErrorExtractor(Exception exception) {
? ? ? ? ? ? super(null);
? ? ? ? ? ? this.exception = exception;
? ? ? ? }
? ? ? ? @Override
? ? ? ? public Builder into(K key) {
? ? ? ? ? ? return new ErrorBuilder(exception);
? ? ? ? }
? ? }
}

到此這篇關于Java JSON提取工具JsonExtractor的使用的文章就介紹到這了,更多相關Java JSON提取工具JsonExtractor內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java整合騰訊云短信發(fā)送實例代碼

    Java整合騰訊云短信發(fā)送實例代碼

    大家好,本篇文章主要講的是Java整合騰訊云短信發(fā)送實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 15道非常經(jīng)典的Java面試題 附詳細答案

    15道非常經(jīng)典的Java面試題 附詳細答案

    這篇文章主要為大家推薦了15道非常經(jīng)典的Java面試題,附詳細答案,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • java實現(xiàn)Img與PDF相互轉換

    java實現(xiàn)Img與PDF相互轉換

    這篇文章主要為大家詳細介紹了java實現(xiàn)Img與PDF相互轉換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 使用Springboot實現(xiàn)word在線編輯保存

    使用Springboot實現(xiàn)word在線編輯保存

    PageOffice目前支持的Web編程語言及架構有:Java(JSP、SSH、MVC等),ASP.NET(C#、VB.NET、MVC、Razor等),PHP,ASP,本篇文章就帶你使用Springboot整合PageOffice實現(xiàn)word在線編輯保存
    2021-08-08
  • 深入分析JAVA 反射和泛型

    深入分析JAVA 反射和泛型

    這篇文章主要介紹了JAVA 反射和泛型的的相關資料,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • mybatis-plus多表關聯(lián)查詢功能的實現(xiàn)

    mybatis-plus多表關聯(lián)查詢功能的實現(xiàn)

    本文給大家介紹mybatis-plus多表關聯(lián)查詢功能的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-11-11
  • Java模板方法模式定義算法框架

    Java模板方法模式定義算法框架

    Java模板方法模式是一種行為型設計模式,它定義了一個算法框架,由抽象父類定義算法的基本結構,具體實現(xiàn)細節(jié)由子類來實現(xiàn),從而實現(xiàn)代碼復用和擴展性
    2023-05-05
  • java poi導出excel時如何設置手動換行

    java poi導出excel時如何設置手動換行

    這篇文章主要介紹了java poi導出excel時如何設置手動換行,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java接口統(tǒng)一樣式返回模板的實現(xiàn)

    Java接口統(tǒng)一樣式返回模板的實現(xiàn)

    這篇文章主要介紹了Java接口統(tǒng)一樣式返回模板的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 解決java.util.NoSuchElementException異常正確方法

    解決java.util.NoSuchElementException異常正確方法

    java.util.NoSuchElementException是Java中的一種異常,表示在迭代器或枚舉中找不到元素,這篇文章主要給大家介紹了關于解決java.util.NoSuchElementException異常的相關資料,需要的朋友可以參考下
    2023-11-11

最新評論

双鸭山市| 醴陵市| 宁国市| 罗源县| 龙川县| 星子县| 泸定县| 中西区| 临江市| 齐河县| 犍为县| 呼玛县| 遂溪县| 孝昌县| 莱阳市| 竹山县| 修武县| 寿光市| 乌审旗| 上虞市| 溆浦县| 闵行区| 东源县| 安乡县| 蕲春县| 文安县| 班戈县| 文安县| 邵东县| 朝阳县| 益阳市| 玛多县| 土默特右旗| 夹江县| 武安市| 罗源县| 磐石市| 牙克石市| 汝南县| 师宗县| 瑞金市|