From 1d32b0862da3932fc948d3d03eb5817041325399 Mon Sep 17 00:00:00 2001 From: Looly Date: Mon, 6 Jun 2022 00:45:50 +0800 Subject: [PATCH] fix json bug --- .../core/convert/impl/ArrayConverter.java | 13 +++++++++++- hutool-json/src/test/java/Issue2365Test.java | 20 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 hutool-json/src/test/java/Issue2365Test.java diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java index 125fe6305..f1668c238 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/impl/ArrayConverter.java @@ -1,13 +1,14 @@ package cn.hutool.core.convert.impl; +import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.iter.IterUtil; import cn.hutool.core.convert.AbstractConverter; import cn.hutool.core.convert.Convert; +import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ByteUtil; import cn.hutool.core.util.CharUtil; import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.text.StrUtil; import java.io.Serializable; import java.lang.reflect.Array; @@ -124,6 +125,16 @@ public class ArrayConverter extends AbstractConverter { return convertArrayToArray(value.toString().toCharArray()); } + //issue#2365 + // 字符串转bytes,首先判断是否为Base64,是则转换,否则按照默认getBytes方法。 + if(targetComponentType == byte.class){ + final String str = value.toString(); + if(Base64.isBase64(str)){ + return Base64.decode(value.toString()); + } + return str.getBytes(); + } + // 单纯字符串情况下按照逗号分隔后劈开 final String[] strings = StrUtil.splitToArray(value.toString(), CharUtil.COMMA); return convertArrayToArray(strings); diff --git a/hutool-json/src/test/java/Issue2365Test.java b/hutool-json/src/test/java/Issue2365Test.java new file mode 100644 index 000000000..2b16fea50 --- /dev/null +++ b/hutool-json/src/test/java/Issue2365Test.java @@ -0,0 +1,20 @@ +import cn.hutool.json.JSONUtil; +import lombok.Data; +import org.junit.Assert; +import org.junit.Test; + +public class Issue2365Test { + @Test + public void toBeanTest(){ + String jsonStr = "{\"fileName\":\"aaa\",\"fileBytes\":\"AQ==\"}"; + final FileInfo fileInfo = JSONUtil.toBean(jsonStr, FileInfo.class); + Assert.assertEquals("aaa", fileInfo.getFileName()); + Assert.assertArrayEquals(new byte[]{1}, fileInfo.getFileBytes()); + } + + @Data + public static class FileInfo { + private String fileName; + private byte[] fileBytes; + } +}