From 5f34b941fab56f422288c73f7a1f8746def9fc42 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 31 Mar 2022 18:01:55 +0800 Subject: [PATCH] fix code --- .../main/java/cn/hutool/json/JSONArray.java | 8 ++++++- .../main/java/cn/hutool/json/JSONObject.java | 6 +++++ .../main/java/cn/hutool/json/JSONUtil.java | 17 ++++++++++++- .../java/cn/hutool/json/IssueI50EGGTest.java | 24 +++++++++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100755 hutool-json/src/test/java/cn/hutool/json/IssueI50EGGTest.java diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java index d813f0b54..c5412c57d 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONArray.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONArray.java @@ -16,6 +16,7 @@ import cn.hutool.json.serialize.JSONWriter; import java.io.StringWriter; import java.io.Writer; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -196,7 +197,7 @@ public class JSONArray implements JSON, JSONGetter, List, Rando this(DEFAULT_CAPACITY, jsonConfig); init(object); } - // -------------------------------------------------------------------------------------------------------------------- Constructor start + // -------------------------------------------------------------------------------------------------------------------- Constructor end @Override public JSONConfig getConfig() { @@ -291,6 +292,11 @@ public class JSONArray implements JSON, JSONGetter, List, Rando return this; } + @Override + public T toBean(Type type) { + return JSON.super.toBean(type, config.isIgnoreError()); + } + /** * 根据给定名列表,与其位置对应的值组成JSONObject * diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java index d45326275..ddb41a42e 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONObject.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONObject.java @@ -22,6 +22,7 @@ import cn.hutool.json.serialize.JSONWriter; import java.io.StringWriter; import java.io.Writer; +import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Collection; @@ -274,6 +275,11 @@ public class JSONObject extends MapWrapper implements JSON, JSON return this; } + @Override + public T toBean(Type type) { + return JSON.super.toBean(type, this.config.isIgnoreError()); + } + /** * 将指定KEY列表的值组成新的JSONArray * diff --git a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java index d1f63d556..7eca8d786 100644 --- a/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java +++ b/hutool-json/src/main/java/cn/hutool/json/JSONUtil.java @@ -421,6 +421,21 @@ public class JSONUtil { return toBean(parseObj(jsonString), beanClass); } + /** + * JSON字符串转为实体类对象,转换异常将被抛出
+ * 通过{@link JSONConfig}可选是否忽略大小写、忽略null等配置 + * + * @param Bean类型 + * @param jsonString JSON字符串 + * @param config JSON配置 + * @param beanClass 实体类对象 + * @return 实体类对象 + * @since 5.8.0 + */ + public static T toBean(String jsonString, JSONConfig config, Class beanClass) { + return toBean(parseObj(jsonString, config), beanClass); + } + /** * 转为实体类对象,转换异常将被抛出 * @@ -458,7 +473,7 @@ public class JSONUtil { * @since 4.3.2 */ public static T toBean(String jsonString, Type beanType, boolean ignoreError) { - return toBean(parse(jsonString), beanType, ignoreError); + return parse(jsonString, JSONConfig.create().setIgnoreError(ignoreError)).toBean(beanType); } /** diff --git a/hutool-json/src/test/java/cn/hutool/json/IssueI50EGGTest.java b/hutool-json/src/test/java/cn/hutool/json/IssueI50EGGTest.java new file mode 100755 index 000000000..cff610a00 --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/IssueI50EGGTest.java @@ -0,0 +1,24 @@ +package cn.hutool.json; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +public class IssueI50EGGTest { + + @Test + public void toBeanTest(){ + String data = "{\"return_code\": 1, \"return_msg\": \"成功\", \"return_data\" : null}"; + final ApiResult apiResult = JSONUtil.toBean(data, JSONConfig.create().setIgnoreCase(true), ApiResult.class); + Assert.assertEquals(1, apiResult.getReturn_code()); + } + + @Data + @AllArgsConstructor + static class ApiResult{ + private long Return_code; + private String Return_msg; + private T Return_data; + } +}